首页> 中国专利> 数据库系统中的日记表

数据库系统中的日记表

摘要

用于在包括快照和日志表的日记表中储存数据库数据的系统、方法和设备。方法包括定义包括快照和日志表的日记表,快照包括日记表中的数据在时间点处的最新表示。方法包括将时间戳分配给快照,时间戳指示快照是何时生成的。方法包括接收在日记表上执行事务以修改日记表中的数据的请求,事务包括插入、删除、更新或合并中的一个或更多个。方法包括将新行插入日志表中来代替在日记表的快照上执行事务,新行包括基于事务请求对日记表做出的更改的指示。

著录项

说明书

相关申请的交叉引用

本申请要求于2019年5月13日提交并且通过引用以其整体并入本文的申请序列号为16/410,695的美国专利申请的优先权。

技术领域

本公开涉及用于数据库的系统、方法和设备,并且更具体地涉及具有日志表(logtable)的数据库表储存设备。

背景

数据库广泛用于计算应用中的数据储存和访问。数据库储存的目标是以有组织的方式提供大量信息,使得可以对其进行访问、管理和更新。在数据库中,数据可以组织成行、列和表。不同的数据库储存系统可用于储存不同类型的内容,例如书目、全文、数字和/或图像内容。此外,在计算中,可以根据数据库的组织方法对不同的数据库系统进行分类。有许多不同类型的数据库,包括关系数据库、分布式数据库、云数据库、面向对象的数据库和其它数据库。

各种实体和公司使用数据库以用于储存可能需要访问或分析的信息。在示例中,零售公司可以将所有销售事务的列表储存在数据库中。数据库可以包括关于事务何时发生、事务在哪里发生、事务的总成本、事务中购买的所有物品的标识符和/或描述等的信息。同一零售公司还可以在同一数据库中储存例如员工信息(可能包括员工姓名、员工联系信息、员工工作履历、员工工资标准等)。根据该零售公司的需求,员工信息和事务信息可以储存在同一数据库的不同表中。当零售公司想要得知储存在数据库中的信息时,零售公司可能需要“查询”其数据库。该零售公司可能希望找到关于例如在特定商店工作的所有员工的姓名、在特定日期工作的所有员工的姓名、在特定时间范围内针对特定产品进行的所有事务的名称等的数据。

当零售商店要查询其数据库以从数据库中提取某些经组织的信息时,将对数据库数据执行查询语句。查询根据指示查询应当返回什么信息的一个或更多个查询判断返回某些数据。查询从数据库提取特定的数据,并将该数据格式化为可读的形式。查询可以用数据库理解的语言(例如结构化查询语言(“SQL”))来编写,因此数据库系统可以确定应该定位什么数据以及如何返回该数据。查询可以请求储存在数据库中的任何相关信息。如果能够找到适当的数据来响应查询,则数据库有可能揭示复杂的趋势和活动。只能通过使用成功执行的查询来利用该能力。

传统的数据库管理要求公司提供基础架构和资源来管理数据中心中的数据库。传统数据库的管理可能代价非常昂贵,并且要求由拥有广泛技术技能组合的多个人员进行监督。传统的关系数据库管理系统(RDMS)要求大量的计算和储存资源并且具有有限的可扩展性。大量数据可以跨多个计算设备储存。服务器可以管理数据,使得客户可以通过本地(on-premises)操作对其进行访问。对于希望拥有内部数据库服务器的实体,该实体必须在用于数据库的硬件和基础架构连同用于储存数据库基础架构的大量物理空间的资本投资上花费大量资源。此外,在断电或其它灾难情况期间,数据库可能非常容易丢失数据。这样的传统的数据库系统具有大量的缺点,基于云的数据库系统可以减轻这些缺点。

可以通过云平台部署和交付云数据库系统,该云平台允许组织和最终用户储存、管理和检索来自云的数据。一些云数据库系统包括通过在计算云之上安装数据库软件来实现的传统数据库架构。数据库可以通过Web浏览器或用于应用和服务集成的应用程序编程接口(API)来访问。一些云数据库系统由供应商运营,该供应商代表客户端直接管理数据库安装、部署和资源分配任务的后端过程。客户端可以具有多个最终用户,这些最终用户通过Web浏览器和/或API访问数据库。云数据库可以通过降低丢失数据库数据的风险并且允许跨多个地理区域的多个用户访问数据来为一些客户端提供大量好处。

在许多情况下,有必要的是,可以通过插入信息、移除信息或修改储存在数据库中的信息来更新数据库数据。用于更新数据库信息的一些过程可能会非常耗时且占用大量资源。具体而言,插入新信息可能不会消耗大量时间或计算资源,但修改或删除现有信息在时间和处理能力方面可能非常昂贵。因为更新数据库信息可能消耗大量的处理资源,所以一些数据库所有者选择在处理资源需求不高的非高峰时段实施更新,和/或选择对数据库执行批量更新以减少更新数据库信息所花费的时间和资源总量。在许多情况下,这不是理想的解决方案,因为它使得数据库数据是陈旧的。这转而可能导致查询结果不准确。

鉴于前述内容,本文公开了用于在包括日志表的储存设备中储存数据库数据的系统、方法和设备。本文公开的系统、方法和设备允许数据库数据是陈旧的而不影响查询结果的准确性。

附图简述

参考以下附图描述了本公开的非限制性和非穷尽的实施例,其中,除非以其它方式说明,在所有的多个附图中,相似的附图标记指代相似的部分。

图1是根据一个实施例的用于在日记表(journal table)中储存和查询数据的系统的示意性框图;

图2是根据一个实施例示出对表版本进行的修改的框图;

图3是根据一个实施例示出对数据库的微分区执行的删除命令的框图;

图4是根据一个实施例示出对数据库的微分区执行的插入命令的框图;

图5是根据一个实施例示出对数据库的微分区执行的更新命令的框图;

图6是根据一个实施例示出日记表的示例日志表的框图;

图7是根据一个实施例的用于生成表的快照的处理流程的示意图;

图8是根据一个实施例的日记表管理器的框图;

图9是根据一个实施例的数据库平台的示意性框图;

图10是根据一个实施例示出资源管理器的组件的框图;

图11是根据一个实施例的执行平台的框图;

图12是用于在数据库的日记表中储存数据的方法的示意性流程图表图;并且

图13是描绘与本文公开的过程和系统的至少一个实施例一致的示例计算设备的框图。

详细描述

公开了用于在具有日志表的储存设备中储存数据库数据的系统、方法和设备。本公开的系统、方法和设备允许数据库数据相对于诸如数据操纵(DML)命令的事务请求是陈旧的,而不牺牲查询结果的准确性。在实施例中,数据库数据储存在包括快照和日志表的日记表中。快照是表中的数据在时间点处的最新表示。日志表是至少自最近一次刷新快照以来已在表上下达和/或执行的所有事务请求的列表。

可以通过插入、删除、更新和合并命令来更改数据库数据。这样的修改可以被称为发生在数据库表上的事务。插入命令可以将数据行添加到数据库的表中,该数据库的表可以是数据库中不同微分区或表的一部分。删除命令可以从表中删除行。更新命令可以对已储存在表中的数据进行更改。合并命令可以从表中添加、更新或删除行。在实现中,数据库数据储存在永不原位更新(never updated in-place)的称为“微分区”的不可变储存设备中。当对微分区中的数据做出任何更改时,整个微分区重新生成。因为插入命令只将新行添加到表中,所以这些新行可以添加到一个或更多个新的微分区中,并且不需要改变现有的微分区。因为更新、删除和合并命令可以跨一个或更多个微分区更新或删除行,所以这些命令往往比更新命令昂贵得多。这些操作可能特别昂贵,因为在可以执行命令之前需要识别具有相关行的微分区。

在一些情况下,可以执行插入命令而不消耗大量时间或资源。新数据可以被摄取(ingest)到数据库中,并且可以生成包括新数据的新微分区。这不影响任何现有的微分区或表,并且可以快速执行。但是,对现有数据的更改可能带来更多的问题,并且可能消耗大量时间和计算资源。

在时间和处理资源方面,执行更新、合并和删除命令可能代价昂贵。可以在具有成千上万个微分区的表上发出示例更新命令。示例更新命令可以仅更改数千个微分区之一的数千行中的一行中的一个单元。要执行该更新命令,必须从数千个微分区中识别出候选微分区。对于那些候选微分区中的每一个,必须用以下方式重新生成整个微分区:移除原始单元并在其位置插入替换单元。这可能是消耗大量时间和资源的昂贵操作。因为更新、合并和删除命令可能代价非常昂贵,所以客户端可能选择延迟这样的操作并批量执行它们。在示例中,客户端可以保存全天发出的所有更新、合并和删除命令,并在使用较少处理资源的非高峰时段使那些命令得到执行。这不是理想的解决方案。当这样的操作被延迟时,数据库没有最新的数据。当客户端选择延迟昂贵的操作时,可以假定数据库总是有一些陈旧的数据,这些陈旧的数据将返回不准确的查询结果。因此,希望提供低成本的手段以确保查询结果相对于已经对表做出的任何修改是准确的,同时确保对表的修改不那么昂贵。

鉴于前述内容,本文公开的系统、方法和设备提供执行仅返回最新数据的数据库查询的低成本手段。本公开的实施例采用日记表来确保查询结果相对于自上次刷新数据以来对数据做出的任何修改都不是陈旧的。日记表的实施例包括两部分(包括快照和日志表)。快照包括特定时间点的所有数据。日志表包括至少自特定时间点以来已经被下达和/或执行的所有更改。

可以将日记表与银行操作进行类比以能够进一步理解。在示例中,用户请求银行账户的最新信息。用户可以查看银行分类账(ledger),银行分类账包括银行账户上做出的所有事务的列表(包括存款和取款)。为了加快此操作,银行可能在前一天业务结束时产生银行账户的日终余额(end-of-day balance)。银行还可以产生自前一天业务结束以来发生的事务的分类帐。这些事务可以应用于日终余额以确定银行账户的当前余额。

在类比中,日记表的快照可以类比于银行账户的日终余额。快照包括特定时间点的所有数据。快照可以包括数据库的表、数据库的微分区或数据库的一些其它组织结构中的所有数据。快照包括指示快照何时生成和/或数据何时最后更新的时间戳。此外,在类比中,日志表可以类比于自前一天业务结束以来(即,自确定日终余额以来)发生的事务的分类账。日志表包括自快照生成以来已对数据下达的所有事务的列表。日志表可以包括数据操纵语言(DML)命令(例如插入、删除和/或更新命令)的列表。日记表是快照和日志表的结合。日记表可用于对数据执行查询,并确保即使当快照是陈旧的时查询结果也是准确的和最新的。

在实施例中,方法包括生成数据库的表的快照,该快照包括表中的数据在时间点处的最新表示。方法包括向快照分配指示何时生成快照的时间戳。方法包括接收对表执行事务的请求,该请求包括插入、删除、更新或合并中的一个或更多个。方法包括将事务添加到与快照相关联的日志表中来代替在表上执行事务。

数据库表可以将数据储存在多个微分区中,其中,微分区是不可变储存设备。当在这样的表上执行事务时,所有受影响的微分区都被重新创建以生成反映该事务的修改的新微分区。在事务完全执行后,可以接着从数据库中移除重新创建的任何原始微分区。在表上执行的每个事务之后生成表的新版本。如果表中的数据经历了许多更改(例如插入、删除、更新和/或合并),则表可能在一段时间内经历许多版本。

可以将微分区视为批处理单元,其中每个微分区具有连续的储存单元。举例来说,每个微分区可以包含介于50MB和500MB之间的未压缩数据(注意,储存装置的实际大小可能更小,因为数据可能被压缩储存)。表中的行组可以映射到以列方式组织的单独的微分区中。这种大小和结构允许对非常大的表进行极其细粒度的修剪,这些非常大的表可以包括数百万甚至数亿个微分区。可以自动收集关于储存在微分区中的所有行的元数据,包括:微分区中每个列的值范围;不同值的数量;和/或用于优化和高效查询处理的附加属性。在一个实施例中,可以对所有表自动执行微分区。例如,可以使用插入/加载数据时出现的排序对表进行透明地分区。

在一个实施例中,数据被储存和维护在云中的不可变的储存服务上。这些储存服务可能包括例如

表的微分区的类比可能是储存场地(compound)中的不同储存建筑物。在类比中,储存场地类似于表,并且每个单独的储存建筑物类似于微分区。整个储存场地中储存了数十万个物品。由于如此多的物品位于储存场地,因此有必要跨多个单独的储存建筑物组织这些物品。可以通过任何有意义的手段跨多个单独的储存建筑物组织物品。例如,一个储存建筑物可以储存衣物,另一个储存建筑物可以储存家庭用品,另一个储存建筑物可以储存玩具,依此类推。每个储存建筑物可以贴上标签,使得更容易找到物品。例如,如果一个人想要找到一个毛绒玩具熊,那么这个人将知道去储存玩具的储存建筑物。储存玩具的储存建筑物可以进一步组织为成行的架子。玩具储存建筑物可以被组织成使得所有填充玩具动物位于一行架子上。因此,寻找毛绒玩具熊的人可能知道去看储存玩具的建筑物,并且可能知道去看储存填充玩具动物的那行。进一步与数据库技术进行类比,储存场地类似于数据库的表。每个单独的储存建筑物类似于数据库表中的微分区。储存建筑物中的一行架子类似于表的微分区中的一列数据。关于每个储存建筑物和关于每行架子的标签类似于数据库上下文中的元数据。

类似于储存场地的类比,本文公开的微分区可以为管理数据库数据、查找数据库数据和组织数据库数据提供相当大的好处。每个微分区将数据库数据组织为行和列,并且储存与表相关联的一部分数据。一个表可能具有许多微分区。数据库数据在许多微分区中的分区可以以对该类型数据有意义的任何方式来完成。例如,如果数据库客户端是信用卡提供商,并且数据是信用卡事务,则该表可以包括列,例如信用卡号、账户成员名称、商户名称、卡事务的日期、卡事务的时间、用卡购买的商品或服务的类型等。表可以包括跨越大量时间段的数百万的信用卡交易,并且每个信用卡事务可以储存在该表的一行中。由于表包含如此多的数百万行,因此表可以被分区成微分区。在信用卡事务的情况下,基于时间对表进行拆分可能是有利的。例如,每个微分区可以表示一天的信用卡事务或一周的信用卡事务。应当理解,可以通过对数据库客户端和表中储存的数据类型有意义的任何方式将表分区成微分区。微分区为管理表中数百万行数据的储存以及为在表中查找某些信息提供大量的好处。

一些插入命令向表中添加新数据,该新数据可以储存在新的微分区中,而无需改变或重新创建任何现有的微分区。例如,表可以具有500个现有的微分区,并且添加到该表的新数据可以导致微分区号501和微分区号502的生成。创建这些新的微分区501和502以储存新数据。此插入命令不会修改或重新创建该500个现有的微分区。这种性质的插入命令执行起来代价不高,因为它不改变任何现有的微分区。这样的插入命令不需要大量时间或处理资源,并且可以被立即执行。

然而,存在许多其它命令,这些命令可能导致现有微分区被改变或重新创建。删除命令导致在移除所删除的行的情况下重新生成现有的微分区。更新命令导致在移除和替换所更新的行的情况下重新生成现有的微分区。合并命令导致在移除和替换所合并的行的情况下重新生成现有的微分区。在时间和处理资源方面,这样的命令执行起来可能代价非常昂贵。一些客户端可能希望推迟这样的命令的执行,使得当处理资源被转移到执行代价昂贵的命令时,常规的数据库操作不受影响。这导致数据库数据是陈旧的,并可能导致不准确的查询结果。因此,立即执行代价昂贵的命令或推迟这样的命令是不理想的。本文的公开内容通过实现称为日记表的新的数据库结构解决了这个问题。

本文公开的日记表使得代价昂贵的命令能够被推迟,而不牺牲在代价昂贵的命令可以被执行之前被处理的查询的准确性。因此,本文公开的日记表使得对该表的昂贵操作能够被延迟,而不导致查询结果是陈旧的。日记表包括快照和日志表。快照包括在特定时间戳处的表中的所有数据。日志表包括自上次生成快照以来需要应用于表的更改的列表。当针对日记表执行查询时,日志中的更改与快照的内容相结合以产生一致的结果。

下面提供了与本公开的实施例一致的系统和方法的详细描述。虽然描述了几个实施例,但是应当理解的是,本公开不限于任何一个实施例,而是包括许多替代方案、修改方案、和等同方案。此外,尽管为了提供对本文公开的实施例的透彻理解在以下描述中阐述了许多具体细节,但是一些实施例可以在没有这些细节中的一些或全部的情况下被实施。此外,为了清楚的目的,没有详细地描述相关领域中已知的某种技术材料,以避免不必要地模糊本公开。

在实施例中,文件元数据储存在元数据储存装置中。文件元数据包含表版本和关于每个表数据文件的信息。元数据储存装置可以包括可变储存装置(可以重写或原位写入的储存装置),例如本地文件系统、系统、存储器等。在一个实施例中,微分区元数据由两个数据集组成:表版本和文件信息。表版本数据集包括表版本到添加文件和移除文件列表的映射。文件信息由关于每个微分区的信息组成,关于每个微分区的信息包括例如微分区路径、微分区大小、微分区主键id以及储存在微分区中的所有行和列的摘要。表的每次修改创建新的微分区和新的微分区元数据。到表中的插入创建新的微分区。从表中删除移除微分区,并且如果未删除微分区中的所有行,则可能用表中的剩余行添加新的微分区。更新移除微分区,并且用具有包含更新的记录的行的新的微分区替换它们。

在一个实施例中,元数据可以储存在不可变储存装置中的元数据微分区中。在一个实施例中,系统可以针对数据库表的每次修改将元数据微分区写入云储存装置。在一个实施例中,系统可以下载和读取元数据微分区以计算扫描集。元数据微分区可以并行下载,并在它们被接收时读取以改进扫描集计算。在一个实施例中,系统可以在后台周期性地整合(consolidate)元数据微分区。在一个实施例中,可以包括性能改进,包括预取、高速缓存、列布局等。此外,在具有列布局的元数据文件的情况下包括加密和完整性检查的安全性改进也是可能的。

现在参考附图,图1是通过读取日记表来执行查询的系统100的示意性框图。日记表102可以跨与共享数据库储存装置908(见图9)相关联的一个或更多个储存设备进行储存。在实施例中,日记表102是包括跨多个不可变储存设备(在本文称为微分区)分布的数据库数据的表。日记表102包括快照104,快照104包括表格格式的数据库数据连同指示快照104的最后刷新的时间戳。日记表102还包括日志表106,日志表106指示自快照104的最后刷新以来日记表102上已经下达和/或执行的所有事务。通过参考快照104和日志表106来进行查询执行108。在实施例中,日记表102是具有附加元数据的数据库的表(即日志表106),该附加元数据指示自表的最后刷新(即,自最新快照104生成)以来表中的数据如何被修改。

日记表102是数据库的表的专用储存机制。传统的数据库表在没有以下指示的情况下被储存:相对于已经在该表上请求的DML命令,该表是否是陈旧的。相比之下,日记表102包括表数据(即快照104)连同元数据(即日志表106),该元数据指示在表中已经请求的、没有在快照104中反映的所有修改。

快照104是在某个刷新时间戳处的表的数据。快照104以包括行、列和单元的表格格式储存。快照104可以跨多个微分区储存。快照104可以跨共享数据库储存装置908平台的一个或更多个储存设备储存。快照104包括在某个时间点处的表或其它储存设备中的所有数据。在各种实现中,快照104是在某个时间点处的表、微分区、外部表、物化视图或其它储存设备中的所有数据。

快照104包括指示快照104的最后刷新时间的时间戳。在实施例中,快照104包括指示快照104的每次历史刷新的分类账。可能导致快照104被刷新的事务包括数据操纵语言(DML)命令,例如插入、删除、更新和合并命令。

在实施例中,快照104是数据库的表。在示例实现中,快照104每周刷新一次,使得在前一周期间在表上请求的所有事务在单次刷新期间被执行。当高成本事务(例如删除、更新和/或合并)在表上被请求时,这是理想的。这样的事务可能消耗大量的时间和计算资源,并且在表的单次刷新期间实现所有事务可能是理想的。此外,可能理想的是:在对处理资源的需求低的非高峰时间(例如在很少用户访问数据库以请求查询和其它数据库操作的夜间)执行所有事务。这可以帮助确保在高峰时段有足够的处理资源可用于以低延迟执行数据库操作。

在示例实现中,快照104在表上请求了阈值数量的事务之后被刷新。例如,快照104仅在表的10,000行被修改后被刷新。例如,快照104仅在五个不同列中的数据被修改之后被刷新。这可以被称为快照104中的数据的“陈旧”的阈值水平。快照104的陈旧的阈值水平可以由客户端账户或管理员手动定义和/或可以自动定义。在实施例中,响应于达到陈旧的阈值水平,快照104被自动刷新。

在实施例中,快照104跨多个微分区储存。这样的不可变储存设备不能原位更新,必须在每次执行事务时重新生成。在示例实现中,表(以及因此快照104)包括数千个微分区,并且每个微分区包括数万行。当在表上请求事务时,必须重新生成一个或更多个微分区以反映插入、删除、更新和/或合并命令。在时间和处理资源方面,重新生成微分区可能代价极其昂贵。因此,理想的是:执行批处理事务执行,使得在表的一次重新生成期间执行多个命令。然而,当事务没有立即在表上执行时(即,当表没有立即重新生成以反映更改时),表中的数据是陈旧的,并且可能不返回准确的查询结果。本文公开的包括快照104和日志表106的日记表102使得查询执行108能够在日记表102上执行:即使当最近没有刷新快照时也返回准确的结果。日记表102使得能够通过参考快照104(即,在最新刷新时间戳处的表数据本身)连同日志表106(即,自最后生成快照104以来在表上已经请求的更改的列表)来执行查询执行108。

日志表106包括已经在表上请求和/或执行的事务的指示。日志表106包括至少自快照104的最后刷新以来发生的所有更改。日记表102可以类比于银行分类账,其中快照104是日终账户余额的指示,日志表106是自最后日终账户余额以来账户上发生的所有存款和取款的分类账。分类帐和日终账户余额的结合可以提供当前账户余额。类似地,快照104和日志表106的结合可以提供表的当前状态。

在实施例中,日志表106是已经在表上下达和/或执行的所有事务以及这些事务下达和/或执行的时间(when)的列表。事务可以包括数据操纵语言(DML)命令,例如插入、删除、更新和/或合并命令。

在实施例中,日志表106是表中的时间列,其被建模为对该表的插入的序列。当日志表106被建模为插入的序列时,日志表106仅指示表中的行或单元的最新值。如果自快照104的最后刷新以来,行或单元已经被修改多次,则日志表仅指示该行或单元的最新值。如果自快照104的最后刷新以来行或单元已经被删除,则日志表106包括具有指示该行或单元被删除的标志的记录。

在实施例中,日志表106包括更改跟踪审核摘要,该更改跟踪审核摘要列出了自快照104的最后刷新以来在该表中已经请求的所有增量(incremental)更改。在实施例中,日志表106包括更改跟踪差量(delta)摘要,该更改跟踪差量摘要列出至少自快照104的最后刷新以来在底层数据源114上请求的“总”更改而不列出增量更改。例如,更改跟踪差量摘要可以指示微分区的某个单元最终从EntryA更新为EntryF。某个单元可能已从EntryA更新为EntryB、更新为EntryC,以此类推更新为EntryF,但更改跟踪差量仅指示该单元已更新为EntryF。相比之下,更改跟踪审核摘要110将指示对单元的每次增量更改。

在实施例中,日志表106是与快照104中的表数据相关联的元数据。日志表106可以作为更改跟踪列或通过其它机制并入快照104中。日志表106可以储存在与快照102相关联的单独的元数据微分区中。对于表的每个微分区,日记表102可以包括数据库数据微分区(快照104),并且还可以包括相应的元数据微分区(日志表106)。数据库数据微分区(快照104)和元数据微分区(日志表106)的结合使得处理器能够通过读取快照104来读取截至时间戳的数据库数据,并且通过读取日志表106进一步读取自该时间戳以来已经对数据库数据请求的任何修改。在实施例中,快照104储存在不能原位更新的不可变储存设备中,日志表106储存在能够原位更新的可变储存设备中。

通过参考快照104连同日志表106(即通过参考整个日记表102)来进行对表的查询执行108。在示例实现中,客户端账户请求具有多个谓词的查询。查询的谓词指示客户端账户想要例如2019年5月在加利福尼亚州做出的所有信用卡事务的摘要。资源管理器(见902)参考共享元数据(见912)以确定可应用的信用卡事务储存在哪里。基于元数据912,资源管理器902确定可应用的信用卡事务储存在日记表A中,并且具体储存在日记表A的最新快照的微分区X中。执行平台(见904)从资源管理器902接收指令以通过从日记表A的微分区X读取数据来处理查询。执行平台904的执行节点从微分区X的快照读取数据库数据,并且进一步将该信息与储存在微分区X的日志表中的信息相结合。执行节点读取微分区X的快照以定位(locate)包含满足查询的多个谓词的数据的所有行。执行节点读取日志表,以确定自快照的最后刷新以来是否已经修改这些行中的任何行。如果自快照的最后刷新以来已经修改这些行中的任何行,则执行节点改变对查询的响应,以反映在日志表中标注但尚未反映在快照中的修改。在此实现中,即使快照是陈旧的,查询响应也仅包括最新数据。

图2示出了具有多个表版本的表历史200的示意性框图。示例表历史200示出了三个表版本,即表版本1、表版本2和表版本3。表版本1包括三个微分区(MP)形式(即微分区1(MP1)、微分区2(MP2)和微分区3(MP3))的数据。在表版本1上执行第一事务202,以生成表版本2。第一事务202包括删除MP2中的行以生成新的微分区4(MP4)并删除原始MP2。在表版本1上执行的第一事务202生成表版本2,该表版本2包括原始MP1和MP3连同新生成的MP4。作为第一事务202的结果,如表版本2中所反映的,MP2已经被从表中移除。在表版本2上执行第二事务204,以生成表版本3。第二事务204包括插入新的行,使得生成微分区5(MP5),并且从表中移除MP3。表版本3包括原始MP1、作为第一事务202的结果生成的MP4和作为第二事务204的结果生成的MP5。作为第一事务202的结果,MP2被移除,并且作为第二事务204的结果,MP3从表中被移除。

如图2所示,数据库表可以在一个或更多个微分区中储存数据库数据,其中微分区构成不可变储存设备。当对表执行更改或修改时,受影响的微分区被移除,并且创建反映更改的新微分区。在实施例中,原始的未修改的微分区不被移除,但是也与新微分区一起储存。该更改可以包括影响表中一行或更多行的任何命令(包括例如删除命令、插入命令、更新命令和/或合并命令)。

在实施例中,快照包括表版本1的数据。在执行第一事务202之前,日志表与快照相关联,该快照指示在表版本1上已经请求所有更改(在这种情况下,在MP2中被删除的行)。快照(即表版本1)和日志表(即所请求的事务的列表)的结合使得处理器能够甚至在表版本2已经生成之前确定表版本2的数据。在第一事务202已经被执行之后,可以为表版本2生成快照,并且可以为第二事务生成日志表,以此类推。

在实施例中,只有在新快照已经完全生成之后,即只有在新快照反映了自最后快照的刷新以来在表上已经请求的所有事务之后,处理器才可以访问新快照。此外,只有在新快照已完全生成以反映表上最新的事务之后,新日志表才与新快照相关联。

图3-5示出了可以在表上执行的删除、插入和更新命令的示例性实施例。应当理解,图3-5中所示的表概要是说明性的,并且包括简单的值来表示可以包括在数据库表中的行和列。

图3示出了示例删除命令300和结果日志表306的框图,该结果日志表306可以在删除命令300被请求但尚未被执行之后返回。图3示出了日记表304连同其组成部分-快照302和日志306。快照302指示截至最新刷新时间戳处的表数据。当结合日志表306读取时,日记表304表示快照302中的数据的最新反映。日志表306是自快照302的最新刷新以来请求对快照302做出的所有更改的表示。

在图3中,快照302具有四列。列1包括主要用于标识目的的行号的条目。列2包括用于行值的条目,行值可以包括根据数据库表的主题或目的的任何值。

如图3所示,在快照302上请求删除命令300。删除命令300反映在日志表306中。当结合日志表306读取快照302时,处理器可以确定日记表304。日记表304是根据删除命令300对数据的准确和最新的反映。

例如,如图3所示,快照302包括四行,即行1、行2、行3和行4。应当理解,快照可以包括任意数量的行,并且通常可以包括数千行。作为示例,快照302中的每行的值被列为四行的值1、值2、值3和值4,但是应当理解,该值可以包括如与数据库相关的任何合适的值。基于如日志表306中反映的删除命令300来确定日记表304。日记表3040仅包括分别具有值1和值4的行1和行4。

图3所示的日志表306标识快照302上已经请求的所有事务。日志表306包括四列,即列1和列2(类似于快照302中所示的那些)连同指示操作何时发生的时间戳列和指示该命令是删除命令还是任何其它命令的“是删除(IS DELETE)”列(可被称为“is_delete”列)。列1指示自从快照302的最后刷新以来行2和行3已经被改变。列2指示行2和行3的值分别为值2和值3。在各种实施例中,在快照302的最后刷新之后行2和行3的值可能已经更改了一次或更多次的情况下,列2可以指示该行的最新值。时间戳列指示在时间戳T1发生的事务。是删除列指示该动作是删除,因为是删除列具有“真(true)”元数据标记。

图4示出了示例插入命令400和结果日志表406的框图,该结果日志表406可被生成以指示插入命令400尚未在快照402上执行。在图4中,快照402表示表的微分区的最新刷新。请求插入命令400,并且插入命令400指示应该将行17和行18添加到微分区。日志表406指示插入命令400的实质,即应该添加行17和行18。日记表404可以由处理器基于快照402和日志表406来确定。

在图4的示例性实现中,插入命令400将行17和行18插入到快照402中。作为示例,快照402包括三行,即分别具有值21、值22和值23的值的行21、行22和行23。通过将快照402与日志表406中的信息相结合来确定日记表404。日记表404(即快照402和日志表406的结合)包括行17和行18。行17和行18的值分别是值17和值18,因为行17和行18是通过插入命令400请求插入的,并且这些值是为该行分配的值。行21、行22和行23的值没有更改。

日志表406指示自快照402的最后刷新以来已经做出的所有事务请求。日志表406指示分别具有值17和值18的行17和行18应该被添加到快照402。时间戳指示行的值在时间戳T2处被更改(在这种情况下,被添加到表中)。是删除列指示该动作不是删除动作,而是某个其它动作(在这种情况下,该动作是插入动作)。

图5示出了在快照502上请求的示例更新命令500的框图。可以由处理器通过结合日志表506读取快照502来确定结果日记表504。

在图5所示的示例实现中,在快照502上请求更新命令500。更新命令500将行1和行4更新为新值。快照502包括分别具有值1、值2、值3和值4的值的行1、行2、行3和行4。如由处理器通过读取快照502连同日志表506确定的日记表504包括行1、行2、行3和行4。然而,由于更新命令500,行1现在具有值11的值,行4现在具有值44的值。

日志表506指示自快照502的最后刷新以来未决的事务请求的实质。日志表506指示分别具有值“值1”和“值2”的值的行1和行4应该被删除。日志表506指示应该插入分别具有值“值11”和“值44”的值的行1和行4。时间戳列指示所有事务是在时间戳T3处请求的。是删除列指示删除了具有值“值1”的行1和具有值“值4”的行4。是删除列指示未删除具有值“值11”的行1和具有值“值44”的行4。

在替代实施例中,即使当请求更新命令500时,日志表506也被实现为插入日志。当日志表506被实现为插入日志时,日志表506仅指示行的最新值,而不指示该行是被插入还是被更新。

图6是日记表的示例日志表600。日志表600可以连同快照一起储存为元数据。在实施例中,快照储存在不能原位更新的不可变储存设备中,并且日志表600也储存在不能原位更新的不可变储存设备中。在实施例中,日志表600和快照储存在单独的不可变储存设备中,这些单独的不可变储存设备可以位于共享储存平台中相同或不同的磁盘储存设备上。在图6所示的示例实现中,日志表600包括四列(包括时间列、主键列、值列和注释列)。

时间列指示在快照上做出事务请求时的时间戳。事务请求的时间戳可以与快照的最新刷新的时间戳进行比较,以确定事务请求是否已经在快照的最新刷新中实现。时间戳可以指示何时下达或接收事务请求,或者时间戳可以指示日志表600中的该行何时被写入。

主键列是该行的唯一标识符列或列集合。日记表中没有两行可以共享同一主键值。主键值将日志表600与快照联系起来,使得可以在日志表600和快照中识别相应的行。例如,日记表的快照包括主键值为K999325的行号325。当行号325的值被某个事务修改时(例如该值基于DML命令被更新),则新的行将被写入日志表600,该日志表600包括同一主键值K999325。主键值可用于将快照中的行号325与写入日志表600的新行相匹配。主键值用于识别快照和日志表600中的相应或“匹配”行。

主键值用于确定快照中的行是否在日志表600中具有任何相应的条目,这些条目指示自从快照的最后刷新以来该行的值是如何被更改的。只有当快照中的行已经被修改时,日志表600中的条目才被写入,因此日志表600不包括快照中的行的全集合。相反,日志表600仅包括已经对快照中的行所做出的更改的列表。主键值用于将快照中的行与日志表600中的相应行进行匹配。

值列指示该行的最新值。在图6所示的示例中,具有主键值K1的行在时间戳T1处以值V11被插入到日记表中。具有主键值K1的同一行在时间戳T3处被更新为具有更新值V12。具有主键值K1的同一行在时间戳T4处被更新为具有值V13。此外,具有主键值K2的行在时间戳T2处以值V21被插入到日记表中。具有主键值K2的同一行在时间戳T6处被更新为具有值V22。此外,具有主键值K3的行在时间戳T5处以值V31被插入到日记表中。在行已经被修改多次的情况下,将使用最新的修改(即具有最新时间戳值的修改)。例如,在该行具有主键值K1的情况下,将使用值V13,因为该值与最新的时间戳T4相关联。此外,例如,在该行具有主键值K2的情况下,将使用值V22,因为该值与该特定主键的最新时间戳T6相关联。

注释列提供做出了什么类型的事务请求(改变该行的值)的指示。在图6所示的示例实现中,注释列可以指示插入命令或更新命令导致行的值更改。注释列可以进一步指示行是否被删除。在实施例中,日志表600包括指示该行是否被删除的是删除列。

图7是示出用于生成数据库快照的处理流程700的示意图。快照捕获数据库的一个或更多个对象,例如数据库的结构(例如概要、表、视图等)和/或数据库的内容(即行)。在某些实施例中,概念上最干净的方法发生在快照反映特定时间点处的数据库的事务一致视图的情况下。

过程流程700示出了描绘在时间t

在实施例中,日志表记录确保日志记录本身包括足够的信息,以正确地且明确地再现自快照的最后刷新以来的事务更改。这可以得到满足,因为日志表应用的更改在提交时是已知的,并且该方法可以包括捕获和序列化由事务做出的元数据更改。

图8是示出根据一个实施例的日记表管理器1028的组件的示意性框图。日记表管理器1028可以生成并刷新日记表快照和日志表。日记表管理器1028包括查询组件802、刷新组件804和事务组件806。查询组件802合并来自快照和日志表的结果以确定日记表的最新版本。刷新组件804基于日志表生成新快照。事务组件806将对该表做出的所有更改引导到日志表,使得该更改被记录(memorialize)在日志表中来代替在快照上执行。

查询组件802被配置为通过读取包括快照和日志表的日记表中的数据来执行查询。查询组件802从快照和日志表中读取行。如果快照和日志表之间存在任何冲突,即两行具有同一主键,则来自日志表的行将获得优先权(take precedence),并用于响应查询。如果日志表中有多行具有同一主键,则较后的行(即具有较高操作时间或较后的时间戳的行)将获得优先权,并用于响应查询。以这种方式,主键被用作日记表的保证,使得用户不会看到具有给定的主键的多于一个行。

事务组件806向日志表中插入新行来代替在日记表的快照上执行事务。可以在日记表上请求各种事务,诸如插入、删除、更新或合并命令。事务组件806向日志表中插入新行,新行指示事务所做出的任何更改。日志表中的每行是对快照的一行做出的更改的指示。例如,日志表中的一行可以指示快照被修改的某行的值。例如,日志表中的一行可以指示快照的某行被删除。

刷新组件804确保日志表的大小保持相对较小,使得日志表的大小不影响查询性能。当在日记表上执行查询时,处理器必须读取快照和日志表,并确定快照和日志表中是否存在任何重复项。如果快照和日志表之间存在重复行(如基于主键确定的),则处理器必须找到该行的最新版本。这个过程随着日志表行的大小而越来越昂贵。因此,刷新组件804周期性地更新快照并截断日志表。对于日志表中的每行,如果快照中存在具有同一主键的相应的行,则该相应的行将根据日志表中的信息进行修改。如果日志表指示相应的行被事务删除,则将从快照中移除该相应的行。如果日志表指示相应的行的值被事务修改了一次或更多次,则相应的行将被更新为如由日志表指示的最新值。如果日志表中存在具有未出现在快照中的主键的新行,则新行的值将被复制作为快照中的新行。处理完日志表中的所有行之后,可以截断日志表。当根据日志表修改/刷新最后一行时,可以通过用操作时间标记快照来截断日志表。对于后续查询,将参考该操作时间,并且将只读取日志表中在该操作时间之后写入的新行。

现在参考图9,示出了用于运行本文公开的方法和系统的数据处理平台900。如图9所示,资源管理器902可以耦合到多个客户端账户914a、914b和914n。客户端账户914a、914b和914n可以表示不同的客户端。在特定实现中,资源管理器902可以支持期望访问执行平台904和/或共享数据库储存装置908的任意数量的客户端账户。客户端账户914a、914b和914n可以包括,例如提供要被摄取到数据库中的用户文件的最终用户、数据储存装置和检索请求、管理本文描述的系统和方法的系统管理员、以及与资源管理器902交互的其它组件/设备。

资源管理器902提供支持数据处理平台900中所有系统和组件的操作的各种服务和功能。资源管理器902可以耦合到共享元数据912,共享元数据912与储存在整个数据处理平台900中的全部数据相关联。共享元数据912包括储存在共享数据库储存装置908中的数据的元数据,并且还包括储存在外部表中的数据的元数据(见106)。在一些实施例中,共享元数据912包括储存在远程数据储存系统中的数据以及可从本地高速缓存获得的数据的摘要。另外,共享元数据912可以包括关于在远程数据储存系统和本地高速缓存中如何组织数据的信息。共享元数据912可以允许系统和服务确定是否需要处理一组数据,而无需从储存设备加载或访问实际数据。

资源管理器902可以进一步耦合到执行平台904,执行平台904提供执行各种数据储存和数据检索任务的多个计算资源,如下面更详细讨论的。执行平台904包括多个执行节点906a、906b、906c和906n,这些执行节点被配置为处理与数据库相关联的各种任务,包括摄取新用户文件和基于新用户文件为表(可以是外部表或储存在共享数据库储存装置908中的表)生成一个或更多个微分区。执行平台904可以耦合到包括多个数据储存设备910a、910b、910c和910n的共享数据库储存装置908。在一些实施例中,共享数据库储存装置908包括位于一个或更多个地理位置的基于云的储存设备。例如,共享数据库储存装置908可以是公共云基础设施或私有云基础设施的一部分。共享数据库储存装置908可以包括硬盘驱动器(HDD)、固态驱动器(SSD)、储存集群或任何其它数据储存技术。另外,共享数据库储存装置908可以包括分布式文件系统(例如Hadoop分布式文件系统(HDFS)、对象储存系统等)。应当理解,共享数据库储存装置908可以由资源管理器902的一个或更多个实例来访问,但是不可以由所有客户端账户914a-914n来访问。在实施例中,资源管理器902的单个实例由多个客户端账户914a-914n共享。在实施例中,每个客户端账户914a-914n具有其自己的资源管理器和/或其自己的共享数据库储存装置908,该共享数据库储存装置908在执行平台904的多个执行节点906a-906n之间共享。在实施例中,资源管理器902负责向特定客户端账户914a-914n提供对共享数据库储存装置908内特定数据的访问。

在特定实施例中,资源管理器902和客户端账户914a-914n、共享元数据912以及执行平台904之间的通信链路经由一个或更多个数据通信网络来实现。类似地,执行平台904和共享数据库储存装置908之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网)的组合。在可替代实施例中,这些通信链路使用任何类型的通信介质和任何通信协议来实现。

如图9所示,数据储存设备910a-910n从与执行平台904相关联的计算资源解耦。基于更改的数据储存/检索需求以及访问数据处理平台900的用户和系统的更改需求,该架构支持对数据处理平台900进行动态更改。该架构使得执行平台904和共享数据库储存装置908能够有效地无限扩展。对动态更改的支持允许数据处理平台900响应于对数据处理平台900内的系统和组件的更改的需求而快速扩展。计算资源与数据储存设备的解耦支持大量数据的储存而不需要相应的大量计算资源。类似地,资源的该解耦支持在特定时间利用的计算资源的大量增加而不需要可用数据储存资源的相应增加。

资源管理器902、共享元数据912、执行平台904和共享数据库储存装置908在图9中示出为单独的组件。然而,资源管理器902、共享元数据912、执行平台904和共享数据库储存装置908中的每一个可以被实现为分布式系统(例如,跨在多个地理位置的多个系统/平台分布)。此外,资源管理器902、共享元数据912、执行平台904和共享数据库储存装置908中的每一个可以根据从客户端账户914a-914n接收的请求的更改和数据处理平台900的更改的需求进行放大或缩小(彼此独立)。因此,数据处理平台900是动态的并且支持定期更改以满足当前数据处理需求。

图10是描绘资源管理器902的实施例的框图。如图10所示,资源管理器902包括访问管理器1002和耦合到数据储存设备1006的密钥管理器1004。访问管理器1002可以处理本文描述的系统的认证任务和授权任务。密钥管理器1004可以管理在认证任务和授权任务期间使用的密钥的储存和认证。请求处理服务1008管理接收的数据储存请求和数据检索请求。管理控制台服务1010支持管理员和其他系统管理人员对各种系统和进程的访问。

资源管理器902还可以包括作业编译器1012、作业优化器1014和作业执行器1016。作业编译器1012解析诸如摄取任务的任务,并生成用于摄取用户文件的执行代码。作业优化器1014基于需要处理和/或摄取的数据确定执行摄取任务的最佳方法。作业执行器1016执行用于由资源管理器902接收的摄取任务的代码。作业调度器和协调器1018可以将接收的用户文件发送到适当的服务或系统以进行编译、优化并分派(dispatch)到执行平台904。虚拟仓库管理器1020管理在执行平台中实现的多个虚拟仓库的操作。

另外,资源管理器902包括配置和元数据管理器1022,配置和元数据管理器1022管理与储存在远程数据储存设备和本地高速缓存中的数据有关的信息。监视器和工作负载分析器1024监督由资源管理器902执行的进程,并管理任务(例如工作负荷)跨执行平台中的虚拟仓库和执行节点的分布。配置和元数据管理器1022以及监视器和工作负载分析器1024耦合到数据储存设备1026。

资源管理器902包括日记表管理器1028。日记表管理器1028生成、管理和监督包括表的快照和日志表的日记表。

图11是描绘执行平台904的实施例的框图。如图11所示,执行平台904包括多个虚拟仓库(包括虚拟仓库1、虚拟仓库2和虚拟仓库n)。每个虚拟仓库包括多个执行节点,每个执行节点包括数据高速缓存和处理器。虚拟仓库可以通过使用多个执行节点来并行执行多个任务。如本文所讨论的,执行平台904可以基于系统和用户的当前处理需求实时添加新虚拟仓库并且丢弃(drop)现有的虚拟仓库。这种灵活性允许执行平台904在需要时快速部署大量计算资源,而不必在不再需要这些计算资源时被迫继续为这些计算资源付费。所有虚拟仓库可以从任何数据储存设备(例如,共享数据库储存装置908中的任何储存设备)访问数据。尽管图11所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中的执行节点的数量是动态的,使得当存在额外需求时创建新执行节点,并且当不再需要现有的执行节点时删除现有的执行节点。

每个虚拟仓库能够访问图9所示的数据储存设备910a-910n中的任何一个。因此,虚拟仓库不必被分配给特定的数据储存设备,而是相反可以从共享数据库储存装置908内的数据储存设备910a-910n中的任何一个访问数据。类似地,图11所示的每个执行节点可以从数据储存设备910a-910n中的任何一个访问数据。在一些实施例中,特定的虚拟仓库或特定的执行节点可以被临时分配给特定的数据储存设备,但是虚拟仓库或执行节点可以稍后从任何其它数据储存设备访问数据。

在图11的示例中,虚拟仓库1包括三个执行节点1102a、1102b和1102n。执行节点1102a包括高速缓存1104b和处理器1106a。执行节点1102b包括高速缓存1104b和处理器1106b。执行节点1102n包括高速缓存1104n和处理器1106n。每个执行节点1102a、1102b和1102n与处理一个或更多个数据储存和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(例如集群服务、物化视图刷新服务、文件压缩服务、储存过程服务或文件升级服务)相关联的数据储存和数据检索任务。在其它实现中,特定的虚拟仓库可以处理与特定的数据储存系统或特定的数据类别相关联的数据储存和数据检索任务。

类似于上面讨论的虚拟仓库1,虚拟仓库2包括三个执行节点1108a、1108b和1108n。执行节点1108a包括高速缓存1114a和处理器1116a。执行节点1108b包括高速缓存1114b和处理器1116b。执行节点1108n包括高速缓存1114n和处理器1116n。另外,虚拟仓库3包括三个执行节点1082a、1082b和1082n。执行节点1082a包括高速缓存1084a和处理器1086a。执行节点1082b包括高速缓存1084b和处理器1086b。执行节点1082n包括高速缓存1084n和处理器1086n。

在一些实施例中,图11所示的执行节点相对于执行节点正在高速缓存的数据是无状态的。例如,这些执行节点不储存或以其它方式维护关于执行节点或正在由特定的执行节点高速缓存的数据的状态信息。因此,在执行节点故障的情况下,发生故障的节点可以被另一个节点透明地替换。由于没有与发生故障的执行节点相关联的状态信息,所以新(替换)执行节点可以容易地替换发生故障的节点而无需关心重新创建特定的状态。

尽管图11中所示的执行节点每个都包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可能不同。图11所示的高速缓存在本地执行节点中储存从共享数据库储存装置908中的一个或更多个数据储存设备中检索的数据。因此,高速缓存减少或消除了在从远程储存系统一致检索数据的平台中出现的瓶颈问题。本文描述的系统和方法不是重复地从远程储存设备访问数据,而是从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用对高速缓存的数据提供快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以储存来自共享数据库储存装置908中的任何储存设备的数据。

此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可以包含大量的计算资源和最少的高速缓存资源,使得该执行节点对于需要大量计算资源的任务有用。另一个执行节点可以包含大量的高速缓存资源和最少的计算资源,使得该执行节点对于需要高速缓存大量数据的任务有用。又一个执行节点可以包含提供更快的输入输出操作的高速缓存资源,该执行节点对于需要快速扫描大量数据的任务有用。在一些实施例中,与特定的执行节点相关联的高速缓存资源和计算资源是在创建执行节点时基于执行节点要执行的预期任务来确定的。

另外,与特定的执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的更改任务而随着时间更改。例如,如果执行节点执行的任务变得更加处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果由执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。

尽管虚拟仓库1、虚拟仓库2和虚拟仓库n与同一执行平台904相关联,但是虚拟仓库可以使用处于多个地理位置的多个计算系统来实现。例如,虚拟仓库1可以由处于第一地理位置的计算系统实现,而虚拟仓库2和虚拟仓库n由处于第二地理位置的另一个计算系统实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同实体维护的基于云的计算系统。

另外,每个虚拟仓库在图11中被示出为具有多个执行节点。与每个虚拟仓库相关联的多个执行节点可以使用处于多个地理位置的多个计算系统来实现。例如,虚拟仓库1的实例在一地理位置处的一个计算平台上实现执行节点1102a和1102b,并在另一地理位置的不同计算平台处实现执行节点1102n。选择特定的计算系统来实现执行节点可以取决于各种因素,例如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定的计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力以及哪些计算系统已经实现虚拟仓库中的其它执行节点。

执行平台904也是容错的。例如,如果一个虚拟仓库发生故障,则该虚拟仓库被处于不同地理位置的不同虚拟仓库快速替换。

特定的执行平台904可以包括任意数量的虚拟仓库。此外,特定的执行平台中的虚拟仓库的数量是动态的,使得当需要额外的处理和/或高速缓存资源时创建新虚拟仓库。类似地,当不再需要与虚拟仓库相关联的资源时,可以删除现有的虚拟仓库。

在一些实施例中,虚拟仓库可以对共享数据库储存装置908中的同一数据进行操作,但是每个虚拟仓库具有其自己的执行节点,该执行节点具有独立处理和高速缓存资源。这种配置允许独立处理不同虚拟仓库上的请求并且请求之间没有干扰。这种独立处理与动态添加和移除虚拟仓库的能力相结合来支持为新用户添加新处理能力,而不影响现有用户观察到的性能。

执行平台904可以对外部表执行查询,其中外部表不由数据库平台管理,但是可以由数据库平台读取。执行平台904可以通过与外部表通信并直接从外部表读取数据来执行这样的查询。

图12是示出用于对相对于一个或更多个事务请求是陈旧的数据执行查询的示例方法1200的示意性流程图。方法1200可以由日记表管理器1028、资源管理器902、数据处理平台900、执行平台904或任何其它合适的计算设备来执行。

方法1200开始,并且计算设备在1202定义包括快照和日志表的日记表。快照包括日记表中的数据在时间点处的最新表示。计算设备在1204向快照分配指示快照何时生成的时间戳。计算设备在1206接收在日记表上执行事务以修改日记表中的数据的请求。事务包括插入命令、删除命令、更新命令或合并命令中的一个或更多个。事务可能影响日记表中的一行或更多行。计算设备在1208向日志表中插入新行来代替在日记表的快照上执行事务。新行包括基于事务来请求对日记表做出的更改的指示。例如,新行指示快照中的某一行被删除或更新。例如,新行指示额外行已经添加到日记表(尚未反映在快照中)。

图13是描绘示例计算设备1300的框图。在一些实施例中,计算设备1300用于实现本文讨论的一个或更多个系统和组件。例如,计算设备1300可以包括或作为更改跟踪管理器628、数据库服务管理器502、处理平台500和/或本文讨论的任何其它组件或系统的一部分。作为另一个示例,本文讨论的组件、系统或平台可以包括一个或更多个计算设备1000。此外,计算设备1300可以与本文描述的任何系统和组件交互。因此,计算设备1300可以用于执行各种程序和任务,例如在本文中所讨论的程序和任务。计算设备1300可以用作服务器、客户端或任何其他计算实体。计算设备1300可以是各种计算设备(例如台式计算机、笔记本计算机、服务器计算机、手持计算机、平板计算机等)中的任一个。

计算设备1300包括一个或更多个处理器1306、一个或更多个存储器设备1304、一个或更多个接口1306、一个或更多个大容量储存设备1308、以及一个或更多个输入/输出(I/O)设备1310,它们全部都耦合到总线1312。处理器1306包括执行储存在存储器设备1304和/或大容量储存设备1308中的指令的一个或更多个处理器或控制器。处理器1306还可以包括各种类型的计算机可读介质,例如高速缓冲存储器。

存储器设备1304包括各种计算机可读介质,例如易失性存储器(例如随机存取存储器(RAM))和/或非易失性存储器(例如只读存储器(ROM))。存储器设备1304还可以包括可重写ROM,例如闪存。

大容量储存设备1308包括各种计算机可读介质,例如磁带、磁盘、光盘、固态存储器(例如闪存)等等。在大容量储存设备1308中还可以包括各种驱动器,以使得能够从各种计算机可读介质读取和/或向各种计算机可读介质写入。大容量存储设备1308包括可移动介质和/或不可移动介质。

I/O设备1310包括各种设备,该各种设备允许将数据和/或其它信息输入到计算设备1300或从计算设备1300检索数据和/或其它信息。示例I/O设备1310包括光标控制设备、键盘、小键盘、麦克风、监视器或其它显示设备、扬声器、打印机、网络接口卡、调制解调器、透镜、CCD或其它图像捕获设备等等。

接口1306包括允许计算设备1300与其它系统、设备或计算环境交互的各种接口。示例接口1306包括任何数量的不同的网络接口,例如到局域网(LAN)、广域网(WAN)、无线网络和互联网的接口。

总线1312允许处理器1306、存储器设备1304、接口1306、大容量储存设备1308和I/O设备1310彼此通信、以及与耦合到总线1312的其它设备或组件通信。总线1312表示几种类型的总线结构(例如系统总线、PCI总线、USB总线等)中的一种或更多种总线结构。

本文的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就这点而言,在流程图或框图中的每个块可以表示代码的模块、段或部分,其包括用于实现指定的逻辑功能的一个或更多个可执行指令。还将注意,框图和/或流程图中的每个块以及在框图和/或流程图中的块的组合可由执行指定功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合实现。这些计算机程序指令还可以储存在可指导计算机或其它可编程数据处理装置以特定方式起作用的计算机可读介质中,使得储存在计算机可读介质中的指令产生制造的物品,其包括实现在流程图和/或框图的一个或更多个块中所指定的功能/动作的指令手段。

本文描述的系统和方法使用新数据处理平台、方法、系统和算法来提供灵活且可扩展的数据仓库。在一些实施例中,所描述的系统和方法利用支持基于云的储存资源、计算资源等的云基础设施。示例基于云的储存资源以低成本按需提供大量储存容量。此外,这些基于云的储存资源可以是容错和高度可扩展的,这在私有数据储存系统中实现起来代价昂贵。示例基于云的计算资源是按需可用的,并且可以基于资源的实际使用水平来定价。通常,云基础设施以快速的方式进行动态部署、重新配置和关闭(decommission)。

在所描述的系统和方法中,数据储存系统利用基于SQL(结构化查询语言)的关系数据库。然而,这些系统和方法适用于使用任何数据储存架构和使用任何语言以在数据库中储存和检索数据的任何类型的数据库。本文描述的系统和方法还可以提供支持不同客户/客户端之间以及同一客户/客户端内不同用户之间的计算资源和数据隔离的多租户系统。

各种技术或者其某些方面或部分可以采用体现在有形介质(诸如,软盘、CD-ROM、硬盘驱动器、非暂时性计算机可读储存介质或任何其它机器可读储存介质)中的程序代码(即,指令)的形式,其中,当该程序代码被加载到诸如计算机的机器中并由该机器执行时,该机器成为用于实践各种技术的装置。在可编程计算机上执行程序代码的情况下,计算设备可以包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或储存元件)、至少一个输入设备和至少一个输出设备。易失性和非易失性存储器和/或储存元件可以是RAM、EPROM、闪存驱动器、光学驱动器、磁性硬盘驱动器、或用于储存电子数据的另一种介质。可以实现或利用本文描述的各种技术的一个或更多个程序可以使用应用编程接口(API)、可重复使用的控件等。这样的程序可以用高级过程语言或面向对象编程语言来实现以与计算机系统通信。然而,如果需要,程序可以用汇编语言或机器语言来实现。在任何情况下,语言可以是编译语言或解释语言,且可以与硬件实现相结合。

应当理解,本说明书中描述的许多功能单元可以实现为一个或更多个组件,该组件是用来更具体地强调它们的实现独立性的术语。例如,组件可以实现为包含定制的超大规模集成(VLSI)电路或门阵列、(诸如逻辑芯片、晶体管)的现成的半导体或其他分立组件的硬件电路。组件还可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等可编程硬件设备中实现。

组件还可以用由各种类型的处理器执行的软件实现。可执行代码的所标识的组件可以例如包含计算机指令的一个或更多个物理或逻辑块,该物理或逻辑块可以例如被组织为对象、过程、或函数。然而,所标识的组件的可执行内容(executables)不需要被物理地放置在一起,而是可包含储存在不同位置的完全不同的指令,当这些指令被逻辑地联接在一起时,这些指令构成该组件并实现用于该组件的所规定的目的。

事实上,可执行代码的组件可以是单个指令或许多指令,并且甚至可以分布在几个不同的代码段上、不同程序之间以及几个存储器设备上。类似地,操作数据在本文中可在组件内被标识和说明,并且可以以任何合适的形式体现并被组织在任何合适类型的数据结构内。操作数据可以被收集作为单个数据集,或者可以分布在不同的位置,包括分布在不同的储存设备上,并且可以至少部分地仅仅作为电子信号存在于系统或网络上。组件可以是被动的或主动的,包括可操作来执行期望功能的代理。

贯穿本说明书的对“示例”的引用意味着结合该示例描述的特定的特征、结构、或特性被包括在本公开的至少一个实施例中。因此,在贯穿本说明书的各个地方中出现的短语“在示例中”不一定都指相同的实施例。

为了方便起见,如本文所使用的多个项目、结构元素、组成元素、和/或材料可以呈现在公共列表中。然而,这些列表应被解释为列表中的每个成员都被单独识别为独立且唯一的成员。因此,在没有相反指示的情况下,这种列表中的任何单个成员都不应仅仅根据其在共同群体中的表现而被解释为事实上等同于同一列表中的任何其他成员。此外,本文中可以参考本公开的各种实施例和示例以及其各种组件的替代方案。应当理解,这些实施例、示例、和替代方案不应被解释为彼此事实上的等同物,而是应被认为是本公开的独立和自主的表示。

虽然为了清楚的目的,已经对前述内容进行了一些详细描述,但是将明显的是,可以在不脱离其原理的情况下做出某些更改和修改。应当注意的是,有许多实现本文描述的过程和装置的替代方式。因此,本实施例应被认为是说明性的而非限制性的。

本领域的技术人员将理解的是,在不脱离本公开的基本原理的情况下,可以对上述实施例的细节做出许多更改。因此,本公开的范围应仅由随附的权利要求确定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号