Traitement en cours

Veuillez attendre...

Paramétrages

Paramétrages

Aller à Demande

1. CN107004016 - Efficient data manipulation support

Note: Texte fondé sur des processus automatiques de reconnaissance optique de caractères. Seule la version PDF a une valeur juridique

[ ZH ]
有效的数据操纵支持


背景技术
一旦被限制到几家大公司,存储和分析大量数据的愿望已经升级和扩展。这些数据中的大部分与传统上由数据仓库管理的数据类似,因此可以在关系数据库管理系统(RDBMS)中合理地存储和处理数据。然而,越来越频繁地,数据不被存储在RDBMS中。相反,数据被存储在不同系统中,包括那些不需要预定义和脊化的(ridged)数据模型的系统。例如,数据可以以非关系格式被存储和管理,例如使用分布式文件系统(例如在Hadoop框架中使用的HDFS),并且使用诸如MapReduce等部件被分析。然而,由RDBMS存储的关系数据被格式化为关系数据,而由Hadoop存储的数据是非关系数据。
虽然处理关系数据和非关系数据长期以来是分开的努力,但是人们不再满足于这种情况。具体地,分析关系数据的人也希望分析非关系数据,并且他们希望分析这两种类型的数据的组合。类似地,分析非关系数据的人希望将非关系数据与存储在RDBMS中的关系数据相结合。更进一步地,即使分析RDBMS中的数据的人也可能希望使用通常与处理非关系数据相关联的工具(诸如MapReduce)用于某些任务。将数据保存在分开的仓库中已不再可行。
已经出现了各种解决方案,使得能够有效且无障碍地存储和分析关系数据和非关系数据两者。出现的一个系统是Polybase,它是RDBMS并行数据仓库的特征,它提供了关系数据和非关系数据的使用SQL(结构化查询语言)的单个关系视图。
发明内容
以下呈现简化的概述,以便提供对所公开主题的一些方面的基本理解。本发明内容不是广泛的概括。它不是旨在确定关键/至关重要的元素或描绘所要求保护的主题的范围。其唯一目的是以简化的形式呈现一些概念,形成稍后呈现的更详细描述的序言。
简要描述,本公开涉及有效的数据操纵支持。可以接收关于数据储存库中的数据的数据操纵。数据操纵可以包括数据存储系统不支持的就地操纵。可以通过以下方式来实现不受支持的就地数据操纵:从数据储存库读取数据集,对第一数据集执行操纵,并且将新的数据集写入数据储存库。可以将数据操纵记录并且应用于从数据源接收到的数据,以避免与将操纵应用于数据储存库相关联的高成本。此外,如果数据操纵最终应用于数据储存库,则仍然可以实现成本降低,因为可以对更改进行批处理。
为了实现前述和相关目的,本文中结合以下描述和附图来描述所要求保护的主题的某些说明性方面。这些方面指示可以实践主题的各种方式,所有这些方式都旨在在所要求保护的主题的范围内。当结合附图考虑时,从下面的详细描述中,其他优点和新颖特征可以变得显而易见。
附图说明
图1是互操作性系统的框图。
图2是代表性数据操纵部件的框图。
图3是代表性压缩部件的框图。
图4是互操作性系统的框图。
图5是数据操纵系统的框图。
图6是处理删除语句的方法的流程图。
图7是执行删除的方法的流程图。
图8是执行删除的方法的流程图。
图9是处理插入语句的方法的流程图。
图10是数据插入的方法的流程图。
图11是处理更新语句的方法的流程图。
图12是执行更新的方法的流程图。
图13是数据压缩的方法的流程图。
图14是执行压缩的方法的流程图
图15是示出用于本公开的各个方面的合适的操作环境的示意性框图。
具体实施方式
数据存储系统关于数据操纵具有不同的能力。例如,基于关系数据的系统通常通过用于在数据库中删除、插入和更新数据的数据操纵语言(DML)来提供对就地数据操纵的完全支持。在一个实例中,可以使用结构化查询语言(SQL)来规定对关系数据的这种操纵。相比之下,诸如Hadoop分布式文件系统(HDFS)的web应用的非关系分布式文件系统不提供诸如删除和更新的就地操纵的完全支持。
对于在实现对数据操纵的不同支持的多个数据存储系统上操作的系统存在问题。例如,作为RDBMS并行数据仓库的特征的Polybase提供了对关系数据和非关系数据的使用SQL(结构化查询语言)的单个关系视图。来自向RDBMS提交查询的关系数据背景的人期望完全支持就地数据操纵,因为这样的操作由RDBMS提供。然而,诸如Hadoop和HDFS的数据存储系统不提供对就地数据操纵的完全支持。
跨越差异的一种方法是将HDFS文件导入RDBMS表中,进行就地更改,删除旧文件,并且导出到新HDFS文件,新HDFS文件反映从RDBMS到HDFS的更改。然而,该方法在资源利用(例如,存储空间、网络带宽...)以及处理时间方面是昂贵的。此外,与将大型HDFS文件导入表中并且编写捕获修改的新的文件相关联的延迟提供了差的用户体验。
下面的细节通常涉及有效的数据操纵支持。可以接收规定就地操纵的数据操纵语句,其针对在与不完全支持就地操纵的数据存储系统相关联的数据储存库上的数据,其中就地操纵表示直接修改数据,而不是创建数据的修改副本。数据操纵可以被记录并且应用于从数据储存库接收的数据,例如作为读取查询的一部分。因此,避免了与不支持就地数据操纵的系统上的每个数据操纵执行就地数据操纵相关联的高成本。此外,即使就地操纵最终被应用于数据储存库,由于可以对更改进行批处理,因此降低了成本。根据从数据储存库接收到的、应用有记录的操纵的数据处理查询,从而确保正确的结果。
在一个特定实例中,可以记录根据就地删除将被删除的数据的身份或位置。随后,可以从对来自数据储存库的数据的读取操作中丢弃这些数据。因此,网络通信流量减少。较不有效的替代方案是从数据储存库获取数据并且去除与删除的数据相对应的数据。
根据一个方面,如果与数据操纵的记录和应用相关联的成本超过与将操纵应用于数据相关联的成本,则可以将数据操纵应用于数据储存库。这种成本效益分析可以根据预定阈值来实现,例如与记录的操纵数目或与数据集相关联的更改百分比相关联的阈值。当然,也可以周期性地(例如,每小时、每天、每月……)或预定地应用数据操纵,并且允许用户发起将数据操纵应用于数据储存库。
现在参考附图更详细地描述本公开的各个方面,其中相同的附图标记通常是指相同或对应的元素。然而,应当理解,与其有关的附图和详细描述并不旨在将所要求保护的主题限制于所公开的特定形式。相反,其意图是涵盖落入所要求保护的主题的精神和范围内的所有修改、等同物和替代物。
首先参考图1,示出了互操作性系统100。如图所示,系统100包括两个数据存储系统,即第一数据存储系统110和第二数据存储系统120。第一数据存储系统110和第二数据存储系统120可以在逻辑上或物理上分开。无论如何,第一数据存储系统110和第二数据存储系统通信地耦合。作为示例而非限制,可以通过网络(例如,局域网、广域网)来连接存储系统。第一数据存储系统110和第二数据存储系统120都包括管理系统和数据储存库,即第一管理系统112、第一数据储存库114、第二管理系统122和第二数据储存库124。第一管理系统112和第二管理系统122被配置为管理对第一数据储存库114和第二数据储存库124的访问。具体地,管理系统通过获取数据并将数据写入相应数据储存库来处理对数据的请求和返回响应。第一数据储存库114和第二数据储存库124可以被实现为存储数据的任何机制,包括但不限于单个数据储存库、多个数据储存库和分布式数据储存库。此外,第一数据储存库114和第二数据储存库124被限制为通过对应的管理系统间接访问或者在没有管理系统的情况下直接访问。
根据一个实施例,第一数据存储系统110可以作为主数据存储系统来操作,并且第二数据存储系统120可以作为辅数据存储系统来操作。更具体地,第一数据存储系统110可以被配置为接收并响应于请求,包括对第一数据储存库114的查询和数据操纵,并且还与第二数据存储系统120交互以处理对第二数据储存库124的查询和数据操纵。例如,可以响应于查询或数据操纵语句来读取、以及删除、插入和更新数据。此外,数据操纵可以对应于直接修改数据集的部分(诸如单行)的就地操纵。在一个特定实例中,第一数据存储系统110可以是并行数据仓库设备,并行数据仓库设备操作存储在第一数据储存库114中的关系数据,第一数据储存库114可以是分布式储存库,并且第二数据存储系统120可以对应于Hadoop系统,Hadoop系统操作第二数据储存库124上的分布式文件系统(例如HDFS)中的非关系数据。为了清楚和简洁,本描述集中于该实施例。然而,系统100不限于此。例如,第一数据存储系统110可以对应于关系数据库管理系统,并且第二存储系统120可以对应于非结构化数据提供者。此外,尽管图1仅描绘了两个数据存储系统,但是应当理解,第一数据存储系统110可以关于任何数目的其他数据存储系统来操作。
这里,第一数据存储系统110包括查询处理器部件130、数据操纵部件132、更改日志134、外部表部件136、读取部件137和写入部件138。查询处理器部件130是被配置为使得能够关于第一数据储存库114、第二数据储存库124或者第一数据储存库114和第二数据储存库124二者来处理查询的机制。在接收到查询之后,查询处理器部件130生成查询计划,执行计划,并且返回响应。在其中第一数据存储系统110操作关系数据并且第二数据存储系统120操作非关系数据的实施例中,可以创建提供非关系数据的关系表示的表。外部表136包括定义存储在第二数据储存库124中的数据的结构(例如,表列)并且标识存储在第二数据储存库124中的数据的位置的元数据。然而,外部表136不包括存储在第二数据储存库124中的数据。查询处理器部件130可以处理对第一数据储存库114的关系表的查询和/或第二数据储存库124的数据的外部表表示。读取部件137被配置为通过直接从第二数据储存库124或者间接地通过第二管理系统122从第二数据储存库124读取数据来获取或导入满足查询的数据。数据的关系表示基于外部表136的元数据来创建,并且用于产生结果。此外,与外部表相关联的导入数据通常是只读的,而不经受修改。
查询不仅可以规定读取操作,还可以规定诸如删除、插入和更新的数据操纵。此外,可以预期,支持就地数据操纵,其直接修改数据集(例如,文件、组块(chunk)、大对象(blob)…)的一部分,这与创建反映修改并且潜在地替换旧数据集的新数据集相反。但是,与外部表相关联的导入数据通常是只读的,而不经受修改。此外,第二数据存储系统120可能不能通过第二管理系统122完全支持就地操纵。
如果与仅读取查询相反,请求包括诸如删除、插入或更新的数据操纵,则查询处理器部件130可以调用数据操纵部件132用于处理。数据操纵部件132被配置为支持对只读数据的就地数据操纵操作,即使操作不被辅存储系统120支持。这可以通过在诸如更改日志134的容器中记录操纵来实现。根据一个实施例,更改日志134是存储在第一数据储存库114中的与外部表136相关联的表。然而,更改日志134可以采用另一种形式并且存储在任何地方,只要第一数据存储系统110可以在需要时访问更改日志134。例如,如果第二数据存储系统120支持追加(append),则更改日志134可以存储在第二数据储存库124中并且由第二管理系统122使用。当由读取部件137从第二数据储存库124加载数据时,可以使用更改日志134,使得返回的数据反映在更改日志中规定的更改。例如,可以删除、添加或者删除并且随后添加行。
将注意力转向图2,示出了代表性数据操纵部件132。数据操纵部件132包括删除部件210、插入部件220、更新部件230和压缩部件240。删除部件210被配置为在更改日志134中记录诸如行的删除的元素。在一个实例中,删除的元素可以由诸如行标识符(RID)的唯一标识符来标识,例如包括文件名和行偏移(对于文本文件)或主键。在接收到规定就地删除的删除语句之后,删除部件210可以通过例如RID来标识满足与删除操纵相关联的谓词(predicate)(例如,一组标准)的适用的行,并且将它们添加到更改日志134。更改日志134可以被实施为存储在第一数据储存库114中的表。在这种情况下,规定以下各项的删除查询:
DELETE FROM customer_hdfs
WHERE c_NAME like%121%”
可以被删除部件210转换或使用以产生:
INSERT INTO delete_delta_cust_HDFS
SELECT RID
FROM customer_hdfs
WHERE c_name like“%121%
这里,更改日志134被命名为“delete_delta_cust_HDFS”。来自外部表“customer_hdfs”的满足谓词“c_name like“%121%”(客户名称匹配字符串模式“%121%”,其中“%”为规定缺失字符的通配符)的RID被插入到更改日志134中。
简要地返回图1,如上所述,更改日志134可以包括诸如行的删除的元素的标识。该信息可以以不同的方式使用。具体地,删除信息可以在由读取部件137读取或扫描存储在第二数据储存库124中的数据期间或之后被使用。在读取期间,例如与读取查询相关联的读取,可以将删除的元素提供给读取部件137,并且读取部件137可以丢弃对应于删除的元素的元素。根据一个实现,可以直接从第二数据储存库124读取数据,以及在对第二数据储存库124的读取操作期间忽略对应于删除的元素的数据。根据另一实现,读取部件137可以生成第二管理系统122可接受的语句/命令,其导致数据被读取,除了删除的元素。该语句可以被提供给第二管理系统,第二管理系统将执行该语句并且将已经滤除删除的数据的数据返回到第一数据存储系统110。不管实现如何,在读取期间执行删除(例如结合读取查询(例如,选择查询))是有益的,因为删除的元素不需要被读取或导入到第一数据存储系统110中,从而节省了第一数据存储系统110上的临时和/或永久存储空间(例如,存储器和磁盘)并且减少了网络流量。在后面的(post)读取或扫描场景中,满足谓词的所有行都将被读取并且导入到第一存储系统110中。随后,可以在导入的数据和更改日志134之间执行反连接等,使得删除的数据被去除。这种方法可以最终减少在删除的数据被去除之后的存储空间的使用,但是不如以前的方法那样有效,至少是因为没有减少网络带宽的使用。
插入部件220可以被配置为记录要插入或添加到更改日志134中的数据。更具体地,在接收到插入语句之后,由插入语句标识的附加元素被添加到更改日志134中。在读取部件137直接从储存库或间接地通过第二管理系统122从第二数据储存库124导入数据之后,更改日志中的记录的数据元素通过追加、连接或其他操作被添加到导入的数据。如果辅存储系统120通过追加操作来提供对添加的支持,例如,插入部件220可以被配置为通过写入部件138发起将行添加到辅数据储存库124。混合方法也是可能的,其中为了插入大量的行,如由预定阈值规定的,插入部件220可以发起向第二数据储存库124中插入,而不需要使用更改日志134。然而,对于少量的行,如由预定阈值定义的,插入部件220可以将行添加到更改日志134。随后,一旦行数达到另一预定阈值,则可以将行添加到第二数据储存库124。
更新部件230被配置为结合所接收的更新语句或操作来采用更改日志134。更新本质上是删除后跟插入。因此,可以应用以上关于删除和插入描述的功能来实现更新操作。为了进一步清楚,在接收到以下更新语句之后,考虑以下实现:
UPDATE customer_hdfs
SET c_nationkey=10
WHERE c_custkey=1
首先,满足谓词“c_custkey=1”的所有行都将被导入临时表“temp_1”中,例如通过执行以下语句:
SELECT RID,*
FROM customer_hdfs
WHERE c_custkey=1
更改日志134可以用受更新影响的一个或多个行来更新。接下来,可以更新临时表,例如使用以下语句:
UPDATE temp_1
SET c_nationkey=10
WHERE c_custkey=1
最后,临时表用于使用以下语句填充外部表“customer_hdfs”:
INSERT INTO customer_hdfs
SELECT*
FROM temp_1
临时表的使用规避了关于在外部表实例是只读的情况下的问题。因此,应当理解,也可以使用临时表,如以上仅关于删除或插入所述的。
压缩部件240被配置为通过排出(drain)更改日志并且将更改应用于诸如第二数据储存库124的数据储存库来执行压缩。在操作中,导入用于外部表的数据,根据记录在更改日志中的数据操纵对数据集进行更改,并且将捕获更改的新数据集(例如,文件、块(block)、大对象(blob)、组块(chunk)...)添加到辅数据储存库。如前所述,这种方法在资源利用(例如,存储空间、网络带宽……)和处理时间方面是昂贵的。根据一个实施例,当对导入的数据应用更改的成本超过应用对数据储存库实现更改的成本时,发起压缩。这可以通过基于删除的数据元素的数目或百分比和/或添加的数据元素的数目或百分比的预定阈值来捕获。
图3更详细地示出了代表性压缩部件240。如图所示,压缩部件240包括触发部件310、排出部件320、导出部件330和清理部件340。触发部件310被配置为分析更改日志并且确定是否满足预定阈值以触发压缩。希望通过引入读取数据和应用更改的成本,避免与生成和向数据储存库写入新文件相关联的大的性能打击(hit)。然而,外部表的性能随着时间的推移而恶化,因为与导入数据和应用更改相关联的开销增加。当导入和应用更改的成本超过生成和向数据源写入文件的成本时,可以触发压缩。触发部件310可以基于删除和/或添加的行的数目或百分比与预定值的比较来进行该确定。如果达到或超过预定阈值,则触发部件310可以通过调用排出部件320来发起压缩。此外,压缩发起不限于基于阈值的触发。还应当理解,该压缩也可以由用户发起或者在调度的时间自动运行。
排出部件320被配置为通过向数据储存库写入添加内容来排出更改日志。例如,如果第二数据存储系统120支持追加或类似的操作,则附加数据可以被提供给其并且随后被追加到对应的数据集(例如,文件、块(block)、大对象(blob)…)。导出部件330在排出操作完成之后被调用。
导出部件被配置为通过调用图1的写入部件138来将反映删除的数据导出到第二数据储存库124。在调用写入部件138之前,基于外部表从第二数据储存库124读取或导入数据。读入或导入的数据导致去除在更改日志134中记录的删除的数据。此外,添加内容在之前被追加,并且因此存在于读取的数据中。现在可以通过调用写入部件138将读取的数据写入第二数据储存库124,使得新的数据替换旧的数据。根据一个特定实现,可以使用由第一数据存储系统110提供的创建外部表作为选择(CETAS)操作来创建新的外部表。这对应于为选择查询的结果创建新表。例如,操作可以规定如下:
CREATE EXTERNAL TABLE customer_hdfs_temp
As
SELECT*FROM customer_hdfs接下来,原始外部表“customer_hdfs”被重命名为“customer_hdfs_old”,并且新的外部表“customer_hdfs_temp”被重命名为原始名称“customer_hdfs”。
在将数据写入储存库之后,调用清理部件340。清理部件340被配置为丢弃和删除所创建的外部表及其从第二数据储存库124中导入的数据。此外,清理部件340被配置为删除更改日志或者更改日志中标识针对至少删除指定的数据的数据。
转到图参考图4,示出了互操作性系统400。图1的互操作性系统100涉及其中数据操纵功能由多个数据存储系统之一执行的实施例。然而,本发明不限于此。如图所示,数据操纵功能可以由中央管理系统410来实现,中央管理系统410与至少第一数据存储系统110和第二数据存储系统120交互。如前所述,第一数据存储系统110和第二数据存储系统120分别包括第一管理系统和第一数据储存库114、以及第二管理系统122和第二数据储存库124。第一管理系统112和第二管理系统122管理与第一数据储存库114和第二数据储存库124的访问和交互,第一数据储存库114和第二数据储存库124都可以以各种方式存储数据,包括跨计算机网络中的多个节点分布。这里,如前所述,中央管理系统410包括查询处理器部件130、数据操纵部件132、更改日志134、外部表136、读取部件137和写入部件138。在该实例中,中央管理系统410接收这样的请求并且返回关于存储在第一数据储存库114、第二数据储存库124或者第一数据储存库114和第二数据储存库124二者中的数据的响应。查询处理器部件130生成查询计划,执行计划,并且返回从第一数据储存库114和第二数据储存库124中的一个或两者获取满足查询的数据的响应。如果请求包括关于删除、插入或更新数据的查询或者其他语句或命令,则可以调用数据操纵部件132。简而言之,数据操纵部件132使得能够将删除、插入和更新功能记录到更改记录134中,而不是将数据操纵应用于数据储存库。随后,当例如响应于用于查询的读取操作从与更改日志134相关联的储存库读取数据时,在数据储存库的读取期间或者在从数据储存库读入或导入数据之后,应用数据操纵。但是不限于此,根据一个实施例,中央管理系统410可以用关系数据库技术实现。在这种情况下,外部表136可以规定存储在数据储存库中的数据的结构(例如,表列)并且标识存储在数据储存库中的数据的位置,并且读取部件137可以采用外部表来指导读取。在某些时候,例如基于策略、调度或用户发起,可能希望对数据储存库实现数据操纵。在这种情况下,可以采用写入部件138将数据写入数据储存库。
根据一个特定实现,第一数据存储系统可以操作关系数据,并且第二数据存储系统120可以操作非关系数据。更具体地,第一管理系统可以对应于关系数据库管理系统(RDBMS),并且第一数据储存库可以是关系数据库。此外,第二管理系统122可以对应于实现MapReduce的Hadoop或Hadoop框架,并且第二数据储存库124可以对应于分布式文件数据(例如HDFS)。在这种情况下,第二数据存储系统120可以不提供由第一数据存储系统提供的就地数据操纵的完全支持。可以通过以下方式来跨越功能之间的不匹配:从第二数据储存库124导入数据,进行更改,并且将数据库导出到第二数据储存库124。然而,如前所述,这可以是要避免或至少延迟以利用批处理的昂贵的操作。中央管理系统实现可以记录数据操纵并且将数据操纵应用于从第二数据储存库124获取的数据的功能,从而避免针对每个数据操纵请求而对第二数据储存库实现更改的成本。然而,在某个预定的、调度或用户发起的点,中央管理系统可以对第二数据储存库实现更改。
图5描绘了可以被采用以处理数据操纵的数据操纵系统500。系统500包括记录装置510、应用装置520、实现装置530和触发装置540。记录装置510可以被实施为用于记录数据操纵(包括就地数据操纵)的硬件、软件或硬件和软件的组合。例如,记录装置可以将数据操纵或关于操纵的信息保存到诸如更改日志的容器。在一个实例中,记录装置可以保存与要删除的数据相关联的标识符和/或位置。在其他实例中,记录装置可以保存要插入到数据集中的数据。
应用装置520采用硬件、软件或硬件和软件的组合,将记录的数据操纵应用于从数据储存库获取的数据。为了处理对存储在数据储存库上的数据的查询,数据被读取。应用装置520关于该读取功能进行操作以应用数据操纵。根据一个实施例,应用装置520可以在读取期间操作,使得例如记录在更改日志中的被指定用于删除的数据被丢弃并且不被读取或获取。根据另一实施例,应用装置520在数据被读取或导入之后对数据进行操作,例如以丢弃与指定用于删除的数据相对应的数据。此外,应用装置520可以将指定用于插入的数据添加到从数据储存库获取的数据。
实现装置530实现或使记录的数据操纵被应用于对应的数据储存库。被实施为硬件、软件或硬件和软件的组合,实现装置530可以读取例如更改日志中的记录的数据操纵,并且使用与修改数据储存库相关联的支持的机制来向数据储存库应用或提交数据操纵。在数据管理系统等支持特定操作的情况下,可以采用该操作来实现对数据的更改。例如,如果追加操作被支持,则指定用于插入的数据可以通过规定的追加操作的执行被插入到数据集中。例如,在没有提供例如关于诸如删除的就地操纵的支持的情况下,实现装置可以从数据储存库导入数据,应用数据操纵,并且将反映数据操纵的数据导出到数据储存库。
触发装置540通过调用实现装置530来触发或发起将数据操纵应用于数据储存库。触发装置540可以被实施为硬件、软件或硬件和软件的组合,其在各种场景中发起将数据操纵应用于数据储存库。在一个实例中,例如,可以关于与数据操纵的数目或对数据集的百分比更改相关的记录操纵建立预定阈值。一个实施例中的阈值可以捕获记录和向所获取的数据应用更改的成本超过对数据储存库实现更改的成本的点。这里,触发装置540可以通过与记录的操纵相关联的另一机制来计算值或监视计算,将该值与阈值相比较,并且如果超过阈值则触发向数据储存库应用更改。在另一实例中,触发装置540可以根据调度(例如,每小时、每天、每周、每月……)发起数据操纵的应用。在另一实例中,触发装置540可以在对数据储存库实现数据操纵的用户发起的命令的叙述(recite)时被激活。
已经关于若干部件之间的交互描述了上述系统、架构、环境等。应当理解,这样的系统和部件可以包括其中规定的那些部件或子部件、规定的部件或子部件中的一些、和/或附加部件。子部件也可以被实现为通信地耦合到其他部件而不是被包括在父部件内的部件。此外,一个或多个部件和/或子部件可以组合成单个部件以提供聚合功能。系统、部件和/或子部件之间的通信可以根据推送和/或拉取模型来实现。为了简洁起见,部件还可以与本文中未具体描述但本领域技术人员已知的一个或多个其他部件交互。
此外,以上公开的系统以及下面的方法的各个部分可以包括或采用人工智能、机器学习、或者基于知识或基于规则的部件、子部件、过程、装置、方法或机制(例如,支持矢量机器、神经网络、专家系统、贝叶斯信念网络、模糊逻辑、数据融合引擎、分类器……)。除了其他以外,这样的部件可以使由此执行的某些机制或过程自动化,以使得系统和方法的部分更具适应性以及高效和智能化。作为示例而非限制,触发部件310可以采用这样的机制来确定或推断何时发起压缩,例如基于上下文和历史信息。
鉴于上述示例性系统,可以参考图6-14的流程图更好地理解可以根据所公开的主题来实现的方法。虽然为了简化说明的目的,将方法示出和描述为一系列框,但是应当理解和意识到,所要求保护的主题不受框的顺序的限制,因为一些框可以以不同的顺序发生和/或与本文中所描绘和描述的其他框同时发生。此外,可能不需要所有图示的框来实现下文中描述的方法。
参考图6,示出了处理删除语句的方法600。在附图标记610处,接收删除语句,其例如被实施为被发送到主存储系统的查询或命令。在附图标记620处,确定指定用于删除的一个或多个数据元素(例如行)。根据一个实例,可以仅基于删除语句来确定数据元素,例如,在具体地标识个体元素的情况下。备选地,可以用标识要删除的数据的谓词来规定数据。在这种情况下,可以执行数据读取,并且可以标识满足谓词的数据,从而标识要删除的数据。根据一个实现,存储过程可以基于文件的名称以及包括起始索引和结束索引的范围来标识数据元素。在附图标记630处,将指定用于删除的数据元素添加到更改日志或其他容器。根据一个实施例,更改日志可以被实施为存储在主数据存储系统的数据储存库中的表。其他实施例也是可能的,包括将更改日志存储在辅数据储存库中。在一个实例中,例如,可以通过记录标识符(RID)标识数据并且将数据保存到更改日志,记录标识符(RID)规定例如文件名和到文件中的索引。
图7描绘了执行删除的方法700。在附图标记710处,标识第一数据元素,诸如行。在附图标记720处,确定第一数据元素是否对应于删除的元素。可以通过将元素与记录在更改日志中的一个或多个数据元素相比较来执行该确定。如果数据元素与更改日志中的数据元素相匹配,则数据元素对应于删除的元素。否则,数据元素不是删除的元素。如果数据元素是删除的元素(“是”),则该方法在附图标记740处继续。如果数据元素不是删除的元素(“否”),则该方法进行到附图标记730,在附图标记730处,读取或换言之导入或加载数据元素。因此,不读取删除的元素。该方法接着在附图标记740处继续,在附图标记740处,确定是否存在更多的数据元素要处理。如果没有更多的数据元素要处理(“否”),则该方法将简单地终止。另一方面,如果存在更多的数据元素要处理(“是”),则该方法进行到附图标记750,在附图标记750处,标识下一数据元素。然后该方法循环回到附图标记720,其确定数据元素是否对应于删除的元素。这里,指定用于删除的数据元素一旦被标识就丢弃并且不被读取。
图8示出了执行删除的方法800。在附图标记810处,标识第一数据元素,诸如行。接下来,在附图标记820处,读取标识的数据元素,并且方法进行到附图标记830。在附图标记830处,确定是否存在更多的数据元素要处理。如果存在更多的数据元素要处理(“是”),则方法在附图标记840处继续,在附图标记840处,标识下一数据元素。随后,该方法循环回到附图标记820,在附图标记820处,读取数据元素。如果没有更多的数据元素要处理(“否”),该方法将在850处继续,在850处,去除删除的数据元素。可以在更改日志中标识删除的数据元素。根据一个实现,如果读取数据元素在更改日志中被指定用于删除,则可以执行反连接或其他操作以去除读取数据元素。在该实例中,读取所有数据并且随后去除指定用于删除的数据元素。
图9描绘了处理插入语句的方法900。在附图标记910处,接收插入语句,其例如被实现为被发送到主存储系统的查询或命令。在附图标记920处,将要根据插入语句来插入的数据添加到更改日志。在附图标记930处,确定是否排出更改日志并且将数据添加到储存库。例如,如果数据存储系统支持追加操作,则可以通过针对更改日志中的插入数据调用追加操作来将插入数据追加到对应的文件。可以基于与要插入的数据元素(例如,行)的数目或百分比有关的预定和定义的阈值来自动进行确定。例如,对于大量数据元素,可以将数据元素添加到外部文件。否则,数据元素可以保留在更改日志中,以便稍后添加到现有文件。更改也可以在调度时间处被自动应用于数据储存库,或者用户可以通过对应的命令来触发插入数据的添加。如果确定更改日志将不被排出(“否”),则该方法终止。如果确定要排出更改日志(“是”),则该方法在940处继续,在在940处,在诸如第二数据储存库的储存库上实现更改。如上所述,如果与储存库相关联的管理系统支持追加操作,则可以将更改日志中标识的数据提供给存储系统以追加数据。在附图标记950处,可以从更改日志清除要插入或删除的数据。
图10示出了数据插入的方法1000。在附图标记1010处,通过咨询更改日志来标识指定用于插入的数据。在附图标记1020处,例如从更改日志或由更改日志规定的其他位置获取数据,并且将其插入诸如文件的文数据结构中。假设存储系统支持追加操作,则可以通过将数据追加到指定的数据结构来插入所标识的数据。然而,如果这样的追加操作不可用,则插入数据的动作可以包括:首先从数据储存库导入数据,将数据追加到导入的数据,并且将更改的数据导出到数据储存库以替换原始数据。
图11示出了处理更新语句的方法1100。在附图标记1110处,接收更新语句例如作为由主数据存储系统接收的查询或查询的一部分。更新语句引用数据储存库中的数据的至少一部分。在附图标记1120处,标识要更新的数据。在一个实例中,这样的数据可以能够仅从更新语句来确定。在另一实例中,可以用谓词来规定要更新的数据。在这种情况下,可以对数据储存库执行数据读取或扫描,并且可以标识满足谓词的数据,从而标识受更新影响的数据。在附图标记1130处,将受更新影响的数据添加到更改日志。具体地,可以更新更改日志以反映特定数据元素的删除和数据元素的添加。换言之,可以分开地标识删除和插入数据。备选地,更改日志可以记录对特定数据元素或行的更新。
图12示出了更新数据的方法1200。在附图标记1210处,从更改日志标识更新。该更新可以规定要删除的数据以及要插入的数据。在附图标记1220处,根据更新删除数据。可以在读取期间或之后执行删除,如上面关于图7和图8所述。在附图标记1230处,插入由更新规定的数据。在由辅存储系统提供追加操作的情况下可以通过使用追加操作来插入数据,或者通过对导入数据的本地添加并且输出更改的数据来插入数据,如以上关于图10所述。可以使用删除后跟插入来实现更新,如上所述。然而,更新也可以实现为插入后跟删除。
在一个实施例中,如果发出插入语句后跟删除或更新语句,其中插入语句和删除或更新语句填充更改日志,则将导致问题。这里,插入的数据元素或行可能不具有与其相关联的唯一标识符(例如,记录标识符),因为它们尚未被写入存储装置。解决这个问题至少有两个选择。首先,可以将插入的数据从更改日志中排出并且写入存储装置,以便为插入的数据获取标识符。第二,可以对更改日志应用删除或更新,以便直接在日志中删除/更新受影响的行。
图13示出了数据压缩的方法1310。在附图标记1310处,分析一个或多个更改日志,其中更改日志规定要删除、添加和/或更新的数据。在附图标记1320处,确定是否要发起数据压缩,其中数据压缩实现对数据储存库的更改。实现对储存库的更改在资源利用(例如,存储空间、网络带宽……)和处理时间方面是昂贵的。然而,由于与导入数据和应用越来越多的更改相关联的开销,应用更改的性能(例如,在数据被读取之后或在读取操作期间)随时间而恶化。根据一个实施例,当对导入的数据应用更改的成本超过实现对数据存储的更改的成本时,可以发起压缩。除了其他以外,这可以通过基于更改的数据元素的数目或更改的数据的百分比(例如,数据文件的一半以上被更改)的预定阈值来捕获。根据另一实施例,压缩可以被调度以在预定的或周期性的时间处(例如,一天一次、一周一次、一个月一次…)执行。如果在附图标记1320处,确定不应当发起压缩(“否”),则该方法可以终止。备选地,如果在附图标记1320处,确定应当发起压缩(“是”),则该方法在1330处继续。在附图标记1330处,从数据源读取或换言之导入数据。在附图标记1340处,将更改应用于数据。更改可以对应于在更改日志或其他容器中捕获的删除、插入和/或更新操作。尽管被描述为在读取数据之后,但是应当理解,在读取期间至少可以执行删除,例如通过丢弃删除的元素。这可以减少导入的数据的大小,以保留存储器/存储空间并且减少网络流量。在附图标记1350处,将应用有更改的数据写入数据储存库。例如,可以采用辅数据存储系统和由此提供的操作来添加新数据并且删除先前的数据。最后,在附图标记1360处,可以清除更改日志或更改的其他容器的更改或删除。
图14描绘了根据特定实现执行压缩的方法。在附图标记1410处,在储存库上实现插入。例如,可以排出记录插入的表,并且通过调用在存储系统上的导致添加数据的操作来实现对储存库的插入。例如,如果数据管理系统对应于Hadoop,则支持追加操作,并且可以调用追加操作来向对应文件追加附加数据。在附图标记1420处,基于原始外部表来创建新的外部表,新的外部表包括定义外部数据的结构和位置的元数据。例如,可以在主存储系统上调用创建外部表作为选择(CETAS)操作。具体地,可以读取或导入数据,并且可以在读取期间或之后丢弃删除的数据。此外,插入的数据将在读取的数据中反映。基于该数据创建外部表。在附图标记1430处,原始外部表被新的外部表替换。在1440处,删除来自数据储存库的读取或导入的数据,并且在附图标记1450处,丢弃对应的外部表(去除表元数据)。在附图标记1460处,删除日志或记录删除的数据元素的其他容器。
本公开支持执行或被配置为执行关于有效数据操纵支持的各种动作的各种产品和过程。接下来是一个或多个示例性方法和系统。
一种方法包括采用被配置为执行存储在存储器中的计算机可执行指令以执行以下动作的至少一个处理器:接收规定关于与数据存储系统相关联的数据储存库的就地数据操纵的数据操纵语句,数据存储系统不支持就地数据操纵;将数据操纵记录在容器中;以及向从数据储存库读取的数据应用容器中记录的一个或多个数据操纵。该方法还包括将数据操纵记录在与外部表相关联的容器中,外部表定义存储在数据储存库中的数据的结构并且标识该数据的位置。该方法还包括:将对存储在数据储存库中的数据的子集的引用与在容器中记录的一个或多个引用相比较;并且仅在容器中没有标识出数据的子集的情况下发起读取数据储存库中的数据的子集。该方法还包括:从数据储存库接收数据;将数据与容器中的一个或多个删除数据操纵相比较;并且如果数据经受一个或多个删除操纵之一,则丢弃该数据。该方法还包括根据容器中的插入数据操纵来保存要添加到数据储存库的数据。该方法还包括读取保存在容器中的数据并且发起将数据追加到数据储存库中的数据集。该方法还包括:从数据储存库接收数据;读取被保存在容器中的数据;并且将保存在容器中的数据添加到接收的数据。该方法还包括在容器达到满足预定阈值的大小之后,发起对数据储存库的数据操纵的应用。该方法还包括从数据储存库导入数据集,使用记录的一个或多个数据操纵修改数据集,以及将数据集导出到数据储存库。
一种系统包括耦合到存储器的处理器,处理器被配置为执行存储在存储器中的以下计算机可执行部件:被配置为在更改日志中记录就地数据操纵的第一部件,就地数据操纵针对不支持就地操纵的数据存储系统的数据储存库;以及被配置为向从数据储存库读取的数据应用更改日志中记录的一个或多个操纵的第二部件。该系统还包括被配置为在更改日志中引用数据储存库中存储的数据的情况下在数据储存库的读取期间丢弃该数据的第三部件。该系统还包括被配置为从数据储存库读取的数据中去除在更改日志中引用的数据的第三部件。系统还包括被配置为将要添加到数据储存库的数据保存到第二更改日志的第三部件。该系统还包括被配置为从第二更改日志获取数据并且发起将数据追加到数据储存库中的数据集的操作的第四部件。该系统还包括被配置为通过在更改日志达到阈值大小之后向数据储存库写入包括更改的新的数据集来发起对数据存储库应用更改的第三部件。阈值大小表示用于在第一数据存储系统上报告和应用操纵的成本超过用于向数据储存库应用该操纵的成本的点。
一种其上存储有指令的计算机可读存储介质,这些指令使得至少一个处理器能够在指令执行时执行方法,该方法包括:维护包括一个或多个唯一标识符的更改日志,一个或多个唯一标识符标识如由数据操纵语言语句规定的、要在数据管理系统的数据储存库上就地删除的数据,其中数据管理系统不支持就地删除;以及在由更改日志标识的数据量达到预定阈值之后,发起更改日志中的标识的数据的删除,其中通过以下方式来实现删除:接收存储在数据储存库上的数据集,从数据集去除所标识的数据,以及向数据储存库写入新的数据集。该方法还包括在数据在更改日志中被标识出的情况下,在数据的读取期间丢弃存储在数据储存库中的数据。该方法还包括从数据储存库获取数据并且随后去除在更改日志中标识的数据。
一种系统包括:用于在更改日志中记录针对与不支持就地数据操纵的数据存储系统相关联的数据储存库的就地数据操纵的装置;以及用于将更改日志中的一个或多个就地数据操纵应用于从数据储存库读取的数据的装置。用于应用的装置还包括在从数据存储系统的读取期间忽略更改日志中指定用于删除的数据。用于应用的装置还包括在从数据存储系统读取数据之后忽略更改日志中指定用于删除的数据。用于应用的装置还包括将更改日志中指定用于插入的数据添加到从数据存储系统读取的数据。该系统还包括用于实现将更改日志中的一个或多个就地数据操纵应用于数据储存库的装置。用于实现的装置还包括导出具有向数据储存库应用的操纵的读取的数据的副本。该系统还包括用于在记录和应用操纵的成本超过对数据储存库的操纵的成本时触发用于实现的装置的装置。
本公开的各个方面涉及以下技术问题:提供对与不提供对就地数据操纵的支持的数据存储系统相关联的数据的就地数据操纵的支持。与解决该问题相关联的技术特征涉及记录操纵并且将操纵应用于从数据储存库获取的数据。记录的操纵可以应用于数据本身,例如在满足与记录操纵相关联的预定阈值之后或者根据调度。然而,在资源利用(例如,存储空间、网络带宽……)和处理时间方面对数据应用操纵可能是昂贵的。不是产生与在不支持就地数据操纵的系统上对每个操纵执行就地数据操纵相关联的高成本,相反,通过记录操纵和应用操纵来避免或至少延迟(并批处理)成本。因此,本公开的各个方面表现出关于资源的有效使用的技术效果,包括但不限于增加处理速度、减少处理器负载、存储器保存和减少网络带宽使用。
词语“示例性”或其各种形式在本文中用于表示用作示例、实例或说明。本文中描述为“示例性”的任何方面或设计不一定被解释为比其他方面或设计优选或有利。此外,仅为了清楚和理解的目的提供了示例,而不意图以任何方式限制或约束所要求保护的主题或本公开的相关部分。应当理解,各种范围的无数的附加或替代示例可以被提出,但是为了简洁起见被省略。
如本文中所使用的,术语“部件”和“系统”以及其各种形式(例如,部件、系统、子系统……)旨在指代计算机相关实体,或者是硬件、或者是硬件和软件的组合、或者是软件、或者是执行软件。例如,部件可以是但不限于在处理器上运行的进程、处理器、对象、实例、可执行文件、执行线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是部件。一个或多个部件可以驻留在进程和/或执行线程内,并且部件可以被本地化在一个计算机上和/或分布在两个或更多个计算机之间。
在本说明书和所附权利要求书中使用的连词“或”旨在表示包括性的“或”而不是排他性的“或”,除非另有说明或根据上下文很明确。换言之,“X”或“Y”旨在表示“X”和“Y”的任何包括性排列。例如,如果“‘A’采用‘X’”,“‘A’采用‘Y’”,以及“‘A’采用‘X’和‘Y’二者”,则在任何上述实例中,“‘A’采用‘X’或‘Y’”都满足。
此外,在详细描述或权利要求书中使用术语“包括(include)”、“包含(contain)”、“具有(has)”、“有(having)”或其形式的变体,这些术语旨在以与术语“包括(comprising)”当在权利要求中作为过渡词使用时被解释类似的方式是包括性的。
为了提供所要求保护的主题的上下文,图15以及以下讨论旨在提供可以实现主题的各个方面的合适环境的简要的一般描述。然而,合适的环境仅仅是一个示例,而不旨在暗示对使用范围或功能的任何限制。
虽然可以在一个或多个计算机上运行的程序的计算机可执行指令的一般上下文中描述以上公开的系统和方法,但是本领域技术人员将认识到,这些方面也可以结合其他程序模块等来实现。通常,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、部件、数据结构等。此外,本领域技术人员将理解,可以使用各种计算机系统配置来实践上述系统和方法,包括单处理器、多处理器或多核处理器计算机系统、微型计算设备、大型计算机、以及个人计算机、手持计算设备(例如,个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费者或工业电子设备等。各个方面也可以在分布式计算环境中实践,在分布式计算环境中,任务由通过通信网络链接的远程处理设备来执行。然而,所要求保护的主题的一些(如果不是全部)方面可以在独立的计算机上实践。在分布式计算环境中,程序模块可以位于本地和远程存储器设备中的一者或两者中。
参考图15,示出了示例通用计算机或计算设备1502(例如,台式计算机、笔记本计算机、平板计算机、手表、服务器、手持设备、可编程消费者或工业电子设备、机顶盒、游戏系统、计算节点……)。计算机1502包括一个或多个处理器1520、存储器1530、系统总线1540、一个或多个大容量存储设备1550、和一个或多个接口部件1570。系统总线1540至少通信地耦合至少上述系统组成部分。然而,应当理解,在其最简单的形式中,计算机1502可以包括耦合到存储器1530的一个或多个处理器1520,其执行存储在存储器1530中的各种计算机可执行动作、指令和/或部件。
一个或多个处理器1520可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件部件、或者被设计用于执行本文中所描述的功能的其任何组合来实现。通用处理器可以是微处理器,但是在替代方案中,处理器可以是任何处理器、控制器、微控制器或状态机。一个或多个处理器1520还可以被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、一个或多个微处理器结合DSP核、或任何其他这样的配置。在一个实施例中,一个或多个处理器可以是图形处理器。
计算机1502可以包括或以其他方式与各种计算机可读介质交互,以支持计算机1502的控制以实现所要求保护的主题的一个或多个方面。计算机可读介质可以是可以由计算机1502访问的任何可用介质,并且包括易失性和非易失性介质以及可移除和不可移除介质。计算机可读介质可以包括两种不同的和相互排斥的类型,即计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括存储设备,诸如存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)……)、磁存储设备(例如硬盘、软盘、磁盒、磁带……)、光盘(例如,光盘(CD)、数字通用盘(DVD)……)、和固态设备(例如固态驱动器(SSD)、闪存驱动器、(例如卡、棒、密钥驱动器……)……)、或任何其他类似的介质,其与传输或通信相反,存储计算机1502可访问的所需信息。因此,计算机存储介质排除调制数据信号以及相对于通信介质描述的内容。
通信介质实施计算机可读指令、数据结构、程序模块、或者诸如载波或其他传输机制的调制数据信号中的其他数据,并且包括任何信息传递介质。术语“调制数据信号”是指以其特征中的一个或多个以能够在信号中编码信息的方式来设置或更改的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质、以及诸如声学、RF、红外和其他无线介质的无线介质。
存储器1530和一个或多个大容量存储设备1550是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,存储器1530可以是易失性的(例如,RAM)、非易失性(例如,ROM、闪存……)、或两者的某种组合。作为示例,基本输入/输出系统(BIOS)(包括在诸如启动期间在计算机1502内的元件之间传送信息的基本例程)可以存储在非易失性存储器中,而易失性存储器可以用作外部高速缓存存储器,以支持一个或多个处理器1520等的处理。
一个或多个大容量存储设备1550包括用于相对于存储器1530存储大量数据的可移除/不可移除、易失性/非易失性计算机存储介质。例如,一个或多个大容量存储设备1550包括但不限于一个或多个设备,诸如磁盘或光盘驱动器、软盘驱动器、闪存、固态驱动器或记忆棒。
存储器1530和一个或多个大容量存储设备1550可以包括或存储有操作系统1560、一个或多个应用1562、一个或多个程序模块1564、和数据1566。操作系统1560用于控制和分配计算机1502的资源。应用1562包括系统和应用软件中的一者或两者,并且可以通过程序模块1564和存储在存储器1530和/或一个或多个大容量存储设备1550中的数据1566来利用操作系统1560对资源的管理以执行一个或多个动作。因此,应用1562可以根据由此提供的逻辑将通用计算机1502转换成专用机器。
所要求保护的主题的所有或部分可以使用标准编程和/或工程技术来实现,以产生软件、固件、硬件或其任何组合,以控制计算机来实现所公开的功能。作为示例而非限制,互操作性系统100或其部分可以是或形成应用1562的一部分,并且包括存储在存储器和/或一个或多个大容量存储设备1550中的一个或多个模块1564和数据1566,模块1564和数据1566的功能在由一个或多个处理器1520执行时可以被实现。
根据一个特定实施例,一个或多个处理器1520可以对应于片上系统(SOC)或类似的架构,在单个集成电路基板上包括或换言之集成硬件和软件。这里,一个或多个处理器1520可以包括一个或多个处理器以及至少类似于一个或多个处理器1520和存储器1530的存储器等。传统处理器包括最少量的硬件和软件,并且广泛地依赖于外部硬件和软件。相比之下,处理器的SOC实现更加强大,因为其中嵌入有硬件和软件,其使得能够以最小或不依赖于外部硬件和软件来实现特定功能。例如,互操作性系统100和/或相关联的功能可以嵌入在SOC架构中的硬件内。
计算机1502还包括通信地耦合到系统总线1540并且支持与计算机1502的交互的一个或多个接口部件1570。作为示例,接口部件1570可以是端口(例如,串行、并行、PCMCIA、USB、FireWire……)或接口卡(例如,声音、视频……)等。在一个示例实现中,接口部件1570可以被实现为用户输入/输出接口,以使得用户能够向计算机1502中输入命令和信息,例如通过一个或多个手势或语音输入,通过一个或多个输入设备(例如,指示设备,诸如鼠标、轨迹球、触控笔、触摸板、键盘、麦克风、操纵杆、游戏垫、卫星天线、扫描仪、相机、其他计算机……)。在另一示例实现中,接口部件1570可以被实施为输出外围接口,以向显示器(例如LCD、LED、等离子体……)、扬声器、打印机和/或其他计算机等提供输出。此外,接口部件1570可以被实施为网络接口,以实现与其他计算设备(未示出)的通信,诸如通过有线或无线通信链路。
上面描述的内容包括所要求保护的主题的各个方面的示例。当然,为了描述所要求保护的主题的目的,不可能描述部件或方法的每个可想到的组合,但是本领域普通技术人员可以认识到,所公开的主题的很多另外的组合和排列是可能的。因此,所公开的主题旨在包含落在所附权利要求的精神和范围内的所有这样的更改、修改和变化。