首页> 中国专利> 跟踪数据库数据的中间变化

跟踪数据库数据的中间变化

摘要

公开了用于跟踪数据库数据的一系列变化的系统、方法和设备。一种方法包括执行事务以通过生成体现该事务的新的微分区来修改数据库的表的微分区中的数据。该方法包括将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳,并且还包括将修改数据与新的微分区相关联,该修改数据包括被事务修改的表的一个或更多个行的指示。该方法包括将事务数据与修改数据相联合以生成联合的数据,并查询联合的数据以确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。

著录项

  • 公开/公告号CN112969996A

    专利类型发明专利

  • 公开/公告日2021-06-15

    原文格式PDF

  • 申请/专利权人 斯诺弗雷克公司;

    申请/专利号CN201980072404.2

  • 申请日2019-10-25

  • 分类号G06F7/00(20060101);G06F11/34(20060101);G06F15/16(20060101);

  • 代理机构11262 北京安信方达知识产权代理有限公司;

  • 代理人周靖;杨明钊

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 11:26:00

说明书

相关申请的交叉引用

本申请要求于2018年11月6日提交的序列号为16/182,216的美国专利申请的优先权,该美国专利申请的内容以其整体并入本文。

技术领域

本公开涉及用于数据库的系统、方法和设备,并且更特别地涉及跟踪数据库数据的中间变化。

背景

数据库广泛用于计算应用中的数据储存和访问。数据库可以包括一个或更多个表,这些表包括或引用数据,数据可以使用查询来进行读取、修改或删除。数据库可以在一个或更多个表中的任何位置存储从小型数据集到超大数据集。该数据可以被组织中的各种用户访问,或者甚至可以(例如经由网站或应用程序接口(API))用于服务公共用户。计算资源和储存资源以及它们的底层体系结构都可以在实现理想的数据库性能方面发挥重要作用。

数据库数据可以通过各种命令(包括修改数据库表中一个或更多个行的插入命令、删除命令和更新命令)进行修改。跟踪这样的修改并确定第一组数据库数据和第二组数据库数据之间的增量信息可能是昂贵的。本文公开了用于有效跟踪对数据库数据进行的变化的系统、方法和设备。

附图简述

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

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

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

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

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

图5是示出根据一个实施例的具有数据库服务管理器的数据库系统的框图;

图6是示出根据一个实施例的数据库服务管理器的部件的框图;

图7是示出根据一个实施例的变化跟踪管理器的部件的框图;

图8是示出根据一个实施例的用于跟踪数据库数据的变化的方法的示意流程图;

图9是示出根据一个实施例的用于跟踪数据库数据的变化的方法的示意流程图;和

图10是描绘符合本文公开的方法和系统的至少一个实施例的示例计算设备的框图。

详细描述

公开了用于跟踪数据库数据的一系列变化和用于返回数据库表的全面的变化跟踪汇总(comprehensive change tracking summary)的系统、方法和设备。数据库变化跟踪可以返回数据库表中哪些行已发生变化以及这些行如何变化的汇总。针对数据库可以返回指示哪些行在两个时间戳之间已经发生变化以及它们如何变化,而不包括关于在两个时间戳之间发生的所有中间变化的信息。可以返回全面的变化跟踪汇总,该全面的变化跟踪汇总指示数据在两个时间戳之间如何发生变化并且包括在第一时间戳和第二时间戳之间发生的所有中间变化。

变化跟踪一直以来非常昂贵,并且需要大量资源和储存容量。传统上,数据库系统是使用事务日志构建的,该事务日志体现了数据库中进行的所有变化。事务日志通常用于使事务变化具有原子性和持久性,并且在数据库系统崩溃且必须恢复信息的情况下又可以被用于恢复。事务包括数据库中发生的所有变化,并可用于重建这些变化。然而,因为没有随机访问储存结构来加快重建数据库的过程,从而项目必须使用日志扫描来进行存储,事务日志方法需要大量的系统资源。此外,事务日志本身是物理的,并且必须对其进行解析且将其应用于页面结构,以提供整行图像和变化。

在本领域已知的替代方法中,关于数据变化的时间信息可以存储在数据库表中的两个事务时间戳列中。事务时间戳列指示行有效时的事务时间。可以生成内部历史表,该历史表存储具有来自事务时间戳列的时间戳的更新的数据信息。更新和删除将变化的行的值复制到内部历史表中,并更新事务时间戳列以标记行的有效事务生命期(lifetime)。当需要历史数据集或变化的数据集时,必须将当前表和内部历史表联合(join)起来,以收集两个事务时间点之间的增量或历史信息。对事务时间戳列和内部历史表的维护给数据库事务增加了大量开销。此外,增量查询在被请求时必须联合来自两个表中的信息。

通过确定表中发生的所有顺序事务对之间已经发生的修改,历史地生成全面的变化跟踪汇总。例如,将确定在时间戳0和时间戳1之间的修改;将确定在时间戳1和时间戳2之间的变化;将确定在时间戳2和时间戳3之间的变化,以此类推。可以通过将表中时间戳为0的数据和表中时间戳为1的数据进行比较来确定修改,并且针对相关时间段中每个顺序的事务对进行以此类推。这可能需要将大量数据存储在数据库中,并且执行起来可能极其昂贵且费时。然后,可以报告一系列修改,以指示在相关时间段中在表上发生的所有修改,其中这种修改包括例如对数据库数据的更新、删除、插入或合并。

本文公开的系统、方法和设备提供了一种低成本的手段来生成包括在相关时间段内在数据库表上已经发生的所有修改的全面的变化跟踪汇总。这样的系统、方法和设备使得能够对事务信息运行单个查询,以返回表上已经发生的修改的全面的列表。这大大减少了在一段时间内分析数据库事务和/或修改所需的存储容量和计算资源。

数据库表可以响应于诸如插入命令、删除命令、更新命令、合并命令等的数据操作(DML)语句而被更改。这样的修改可以被称为在数据库表上发生的事务。在实施例中,每个事务包括时间戳,该时间戳指示事务何时被接收和/或事务何时被完全执行。在实施例中,事务包括对表进行的多个更改,并且这样的更改可能影响表中的一个或更多个微分区。

数据库表可以将数据存储在多个微分区中,其中微分区是不可变储存设备。当对这样的表执行事务时,所有受影响的微分区都被重新创建,以生成反映事务的修改的新的微分区。在事务被完全执行后,然后可以从数据库中移除任何重新创建的原始微分区。在对表执行每个事务之后,都会生成该表的新版本。如果表中的数据经历了许多变化(例如插入、删除、更新和/或合并),则表在一段时间内可能经历许多版本。该表的每个版本可以包括元数据,该元数据指示什么事务生成了该表、该事务何时被下达(order)、该事务何时被完全执行以及该事务如何更改该表中的一个或更多个行。所公开的用于低成本表版本化(versioning)的系统、方法和设备可以被用来提供用于生成全面的变化跟踪汇总的有效手段,该全面的变化跟踪汇总指示在第一时间戳和第二时间戳之间已经对表进行的所有中间变化。

变化跟踪信息可以作为元数据存储在数据库中。该元数据描述了存储在客户数据库表中的数据,但实际上并不是存储的表数据。元数据可能会变得非常大(尤其是如果有许多客户的大型数据库表)。当前的数据库系统在处理大量元数据方面有严格的限制。当前的数据库系统将元数据存储在可变储存设备和服务(包括主存储器、文件系统和键值存储)中。这些设备和服务允许元数据就地更新数据。如果数据记录变化,则可能会用新信息进行更新,而旧信息将被覆盖。这允许数据库通过就地更新元数据来轻松维护可变元数据。

然而,这些可变储存设备和服务有限制。限制至少有两个方面。首先,可变储存设备(例如主存储器和文件系统)在储存容量方面有严格的限制。如果元数据的大小超过这些限制,就不可能在那里存储更多的元数据。其次,可变储存服务(例如键值存储)在读取大量元数据时表现不佳。读取数据是使用范围扫描来执行的,这需要很长时间才能完成。实际上,在大规模部署中,范围扫描可能需要很多分钟或甚至接近一个小时才能完成。

这些限制使得不可能在现有的可变储存设备和服务中存储大量元数据。本文公开的系统、方法和设备提供了改进的元数据储存和管理,其包括将元数据存储在不可变(非可变)储存器(例如微分区)中。如本文所使用的,不可变或非可变储存包括其中数据不能或不允许被就地覆盖或更新的储存。例如,位于储存介质的单元或区域中的数据的变化可以作为新文件存储在储存介质的不同的、带时间戳的单元或区域中。可变储存可以包括其中允许数据被就地覆盖或更新的储存。例如,当与储存介质的给定单元或区域相关的数据发生变化时,储存介质的该给定单元或区域中的数据可以被覆盖。

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

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

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

在实施例中,公开了一种用于跟踪数据库数据的中间变化的方法。该方法包括执行事务以通过生成体现该事务的新的微分区来修改数据库的表的微分区中的数据。该方法包括将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳。该方法包括将修改数据与新的微分区相关联,该修改数据包括由事务修改的表的一个或更多个行的指示。该方法包括将事务数据与修改数据相联合以生成联合的数据。该方法包括查询联合的数据以确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。

在实施例中,事务数据包括关于导致生成新的微分区的事务的信息。在基于一个事务生成多个新的微分区的实施方式中,事务数据将与每个新的微分区相关联。事务数据包括例如发起事务的用户或账户的身份、事务被请求时的时间戳、开始执行事务时的时间戳、完成事务的执行时的时间戳、被事务修改的所有行的列表以及这些行是如何被修改的、基于事务生成和/或移除的微分区的列表、以及与事务相关的任何其他合适的信息。事务数据可以作为元数据存储在新的微分区中。

在实施例中,修改数据包括关于事务修改了哪些行、事务修改了哪些微分区、事务如何修改了行和/或微分区的信息、关于表上的先前修改的信息等等。修改数据可以包括自表最初生成以来或者自特定时间以来对表进行的修改的沿袭(lineage)。修改数据可以包括表的表版本的列表(包括当前是表的一部分或历史上是表的一部分的所有微分区)。修改数据可以作为元数据存储在新的微分区中。

在实施例中,事务数据和修改数据被联合以生成联合的数据。联合的数据至少指示(a)什么事务导致了对表的修改;以及(b)表是如何被修改的。可以查询联合的数据,以确定在第一时间戳和第二时间戳之间已经对表进行的中间修改的列表。中间修改的列表可以包括已经对表执行的所有事务的列表以及这些事务如何修改了表。中间修改的列表包括随后由在第一时间戳和第二时间戳之间的后续事务逆转的表修改。

查询中间修改的列表提供了一种高效且低成本的手段来确定在两个时间点之间对数据库表进行的递增变化的全面的列表。这优于本领域中已知的方法,在本领域已知的方法中必须手动比较一系列后续表版本中的每一个表版本,以确定表是如何随时间被修改的。本领域中已知的这样的方法需要大量的储存资源和计算资源来执行。

在实施例中,表版本历史被生成并包括存储在微分区和/或新微分区内的一个或更多个变化跟踪列。一个或更多个变化跟踪列可以包括指示以下项中的一项或更多项的信息:行值的先前微分区名称、行值的先前行标识、对行值采取的动作、行值是否被更新、对行或行值进行的变化的日志、指示在一段时间内对行进行的一个或更多个变化的行的沿袭、已经发起的对行的修改的事务的列表、以及可以指示对行或微分区进行的变化或者已经对表中的行或微分区进行的变化的历史列表的任何其他合适的信息。

在实施例中,文件元数据存储在元数据储存器中。文件元数据包含表版本和关于每个表数据文件的信息。元数据储存器可以包括可变储存器(可以被就地覆盖或写入的储存器),例如本地文件系统、系统、存储器等。在一个实施例中,微分区元数据由两个数据集组成:表版本和文件信息。表版本数据集包括表版本到添加的文件和移除的文件的列表的映射。文件信息由关于每个微分区的信息组成,其包括例如微分区路径、微分区大小、微分区密钥id以及存储在微分区中的所有行和列的概要。对表的每项修改都会创建新的微分区和新的微分区元数据。向表中插入会创建新的微分区。如果未删除微分区中的所有行,则从表中删除会移除微分区,并可能在表中的其余行中添加新的微分区。更新会移除微分区,并用新的微分区替换它们,该新的微分区具有包含更新的记录的行。

在一个实施例中,元数据可以存储在不可变储存器中的元数据微分区中。在一个实施例中,系统可以针对数据库表的每项修改将元数据微分区写入云储存。在一个实施例中,系统可以下载和读取元数据微分区来计算扫描集。元数据微分区可以被并行下载,并在它们被接收时读取,以改善扫描集计算。在一个实施例中,系统可以在后台周期性地合并元数据微分区。在一个实施例中,可以包括包括预取、缓存、柱状布局等的性能改善。此外,包括加密和完整性检查的安全性改善还可以利用具有柱状布局的元数据文件来进行。

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

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

在实施例中,可以确定全面的变化跟踪汇总,该全面的变化跟踪汇总指示在例如表版本1和表版本3之间已经进行的所有变化。图1所示的实施方式的全面的变化跟踪汇总将指示第一事务102导致从MP2中删除行并且导致在没有这些行的情况下生成MP4。该汇总将进一步指示第二事务104导致将新的行插入到表中,导致移除MP3,并且导致在具有这些新的行的情况下生成MP5。全面的变化跟踪汇总指示表上发生的所有事务、这些事务何时发生以及这些事务如何影响表。

在实施例中,仅当事务完全完成时才更新表历史。因此,如果事务被发起但没有完全完成,则表历史将不会被更新以包括该事务。例如,如果发起事务来删除原始微分区的某些行,则将生成新的微分区,该新的微分区包括原始微分区中除了基于删除命令应该删除的那些行之外的所有原始行。如果事务没有完成,即如果未完全生成新的微分区,则表历史将不会被更新以指示发生了事务。

在实施例中,表历史存储在元数据列中,该元数据列包括存储在一段时间内微分区名称的沿袭的微分区沿袭。元数据列还可以包括存储在一段时间内给定行的序数的沿袭的行沿袭。当第一次创建表时或在表中生成新的行时,这些值为空(NULL)。当生成新的行时,存储的值将为空,并且实际的逻辑值可以从其中存储该行的微分区的名称和该行在该微分区中的排序(rank)中导出。

在实施例中,当行被复制到新的微分区中作为DML查询执行的一部分时,并且如果该行的值为空,则通过用该行在该微分区中的适用的微分区名称和适用的排序替换该值来实现该行的沿袭。当行被复制到新的微分区中并且该行的值不为空时,该行的名称被复制到新的微分区中。

图2-4示出了可以对数据库表执行的删除命令、插入命令和更新命令的示例性实施例。应该理解的是,图2-4所示的表模式是说明性的,并且包括简单的值来表示可以被包括在数据库表中的行和列。

图2示出了示例删除命令200和在删除命令200完成后可以返回的结果增量210的框图。如图2所示的微分区2(MP2)包括四列。第1列包含主要用于标识目的的行号的条目。第2列包括行值的条目,根据数据库表的主题或目的,行值可以包括任何值。元数据名称列包括关于数据源自哪个微分区或最后位于哪个微分区内的表历史信息。元数据行列包括关于数据源自哪一行或位于哪一行内的表历史信息。

如图2所示,对MP2执行删除命令200,并从MP2删除第2行和第3行,以生成新的MP4。作为示例,如图2所示,MP2包括四行,即第1行、第2行、第3行和第4行。应当理解,微分区可以包括任意数量的行,并且通常可以在单个微分区中包括数千行。通过示例的方式,MP2中的每一行的值针对四行被列为值1、值2、值3和值4,但是应该理解,该值可以包括与数据库相关的任何合适的值。在原始和未修改的MP2中,四行中每一行的元数据名称都是“空(MP2)”,其指示该数据是该微分区的原始数据,并且还没有任何变化历史。同样地,MP2的元数据行列为空,并指示原始行号,因为该数据是MP2的原始数据,并且还没有变化跟踪历史。

MP4是基于对MP2执行的删除命令200生成的,该删除命令200删除了如图2所示的第2行和第3行。MP4现在只包括分别具有值1的值和值4的值的第1行和第4行。第1行和第4行中的每一者的元数据名称均为“MP2”,其指示该行数据源自MP2或最后位于MP2内。第1行和第4行中的每一者的元数据行分别为1和4,这指示这些行最后所处的位置。

在对表执行删除命令200之后,可以确定增量210。在实施例中,时间戳被附接到表中发生的每个事务。如果事务完全完成,则时间戳会还附接到关于该事务的变化跟踪历史。将时间戳附接到变化跟踪历史使得系统能够知道表何时由于某个事务而发生变化以及何时对表中的多个行中的任何一行发生某个变化。

图2中所示的增量210确定MP2和MP4之间的差异或MP2和MP4之间发生的变化。在各种实施例中,增量210可以确定在任两个时间戳之间已经发生的总变化,即使对在这两个时间戳之间的数据已经发生了许多事务并且数据已经被变化多次。增量210提供两个时间戳之间的总变化的指示,而不提供关于在第一时间戳和第二时间戳之间发生的任何中间变化的信息。

增量210包括四列,即第1列和第2列(类似于在MP2和MP4中示出的那些列)以及元数据操作列和元数据是更新列。第1列指示在第一时间戳和第二时间戳之间第2行和第3行已经被更改。第2列指示第2行的值和第3行的值分别为值2和值3。在各种实施例中,在第2行的值和第3行的值在第一时间戳和第二时间戳之间可能已经变化一次或更多次的情况下,第2列可以指示原始值或最新值。元数据操作列指示第2行和第3行经历了删除命令。元数据是更新列指示元数据是否被更新。在图2所示的增量210中,元数据是更新列返回假(FALSE),因为该行没有经历更新(而是被删除)。

在实施例中,生成包括已经针对该表发起的所有事务的表历史。这样的事务可以包括例如数据操作语言(DML)命令(例如对微分区发起的删除命令、插入命令、合并命令或更新命令)。表历史可以被动态更新,以反映在事务时间间隔内表中所有删除的行或插入的行。表历史可以包括按事务时间排序的DML语句列表,其中每个事务包括时间戳。在实施例中,假设所有DML语句将同时删除行、插入行和/或更新行。

在实施例中,可以通过检索两个事务之间添加的微分区和移除的微分区的列表来确定表历史。对于每个给定的微分区,可以生成依赖关系的沿袭序列,该沿袭序列指示哪些行已经被更新、这些行是如何被更新的、以及什么事务导致了每次更新。可以通过请求沿袭中两个时间戳之间的变化集来确定增量。增量可以返回在两个时间戳之间的所有添加的微分区和所有移除的微分区的列表。可以通过移除出现在添加的微分区的列表上和移除的微分区的列表上的这些微分区来合并列表。这可以通过对添加的微分区的列表和移除的微分区列表执行反联合(anti-join)来完成。

在实施例中,确定在添加的微分区和移除的微分区之间的行粒度变化。在这样的实施例中,在元数据分区和元数据行号列上的添加的微分区的行集和移除的微分区的行集之间执行完全外部联合。当所得的联合的行集包括来自添加的行集的数据中的元数据列的空值时,这指示这些行表示删除。如果来自插入的行集的数据中的元数据列的值为空,则这指示这些行表示插入。如果源自添加的行集和移除的行集的元数据列都为空,则这指示这些行可能被更新,并且比较原始数据列将得到指示这些行是否被实际修改的信息。

此外,在实施例中,可以针对给定的表在任意两个事务时间之间确定行粒度变化列表。可以生成并行表示(side-by-side representation),该并行表示可以通过检查存在数据的哪一部分来容易地在合并语句中使用。表值函数可用于查询给定表(或实例化视图)的表历史。此外,可以通过引用变化集中的插入列或删除列来使用SQL语句,以返回表中哪些行已被插入或删除的指示。

图3示出了示例插入命令300和在插入命令300完成后可以返回的结果增量310的框图。图3开始于示例性微分区3(MP3),其经历插入命令300以生成微分区5(MP5)。插入命令300将第17行和第18行插入MP3。作为示例性实施例,MP3包括三行,即分别具有值21的值、值22的值和值23的值的第21行、第22行和第23行。三行中的每一行的元数据名称都为空(MP3),因为还没有指示行来自哪里或最后存储在哪里的行的变化跟踪历史。空()符号指示当行第一次插入到表中时,元数据列的值为空。空()符号可以减少开销。当行的值被复制到新的微分区中时,该行的排序用空()符号表示,使得第一行为空(1),第二行为空(2),第三行为空(3),依此类推。

MP5是基于插入命令300生成的,并且现在包括第17行和第18行。第17行和第18行的值分别为值17和值18,这是因为将第17行和第18行插入了MP5中,并且它们是为行分配的值。第21行的值、第22行的值和第23行的值没有变化。第21行、第22行和第23行的元数据名称信息是“MP3”,因为数据源自微分区3或最后存储在微分区3中。第21行的元数据行信息、第22行的元数据行信息和第23行的元数据行信息分别是1、2和3,因为第21行、第22行和第23行最初或最后存储在微分区3中的第1行、第2行和第3行中。第17行和第18行的元数据名称信息和元数据行信息为“空”,因为这些行源自MP5,并且还没有任何变化跟踪历史信息。

插入命令300的增量310示出了在第一时间戳和第二时间戳之间进行的总变化。如图2所示,增量310示出了MP5和MP3之间发生的变化。应当理解,在替代实施例或实施方式中,增量可以指示在任意两个时间戳之间在表上发生的总变化或修改,而不指示在表上发生的递增变化。

增量310包括分别具有值17和值18的第17行和第18行,因为第17行和第18行是由于插入命令300而被添加到MP3的。第17行和第18行的元数据操作是“插入”,因为插入命令300是导致对这些行进行修改的事务。第17行和第18行的元数据是更新信息为“假”,因为这些行没有被更新,而是被插入。

图4示出了示例更新命令400和在更新命令400完成后可以返回的结果增量410的框图。在图4所示的示例实施例中,微分区78(MP78)被更新以生成微分区91(MP91)。更新命令400将第1行和第4行更新为新的值。MP78包括分别具有值1的值、值2的值、值3的值和值4的值的第1行、第2行、第3行和第4行。这些行中的每一行的元数据名称信息为“空”(MP78),因为还没有指示这些行最后存储在哪里的这些行的变化跟踪历史。这些行中的每一行的元数据行信息为空,因为还没有指示这些值最后存储在哪一行的这些行的变化跟踪历史。

MP91包括第1行、第2行、第3行和第4行。然而,由于更新命令400,第1行现在具有值11的值,并且第4行现在具有值44的值。第1行、第2行、第3行和第4行中的每一行的元数据名称信息为“MP78”,因为这些值源自MP78或最后存储在MP78中。第1行的元数据行信息为“1”,因为该值最后存储在MP78中的第1行中。类似地,对于第2行、第3行和第4行,元数据行信息分别是“2”、“3”和“4”。当第1行、第2行、第3行和第4行被复制到新的MP91时,这些行的序数位置(还称为“排序”)也被从原始MP78复制过来。

增量410指示第一时间戳和第二时间戳之间的变化。如图4所示,增量410指示由于更新命令400导致的MP78和MP91之间的总变化。增量410指示分别具有“值1”的值和“值2”的值的第1行和第4行被删除。增量410指示分别具有“值11”的值和“值44”的值的第1行和第4行被插入。针对所有行的元数据是更新信息为“真”,因为对这些行执行了更新命令400。如增量410所示,当执行更新命令时,删除原始行,并插入新的行来执行该命令。

在实施例中,每个增量210、310、410可以用于确定在第一时间戳和第二时间戳之间的表的全面的变化跟踪汇总。增量信息可以作为元数据存储在表中生成的每个新的微分区中的变化跟踪列中。可以查询增量信息来确定该表的全面的变化跟踪汇总。

转到图5,示出了根据一个实施例的用于提供数据库服务的处理平台500的框图。处理平台500包括可由多个用户504、506和508访问的数据库服务管理器502。数据库服务管理器502在本文还可以被称为资源管理器或全局服务。在一些实施方式中,数据库服务管理器502可以支持希望访问处理平台500的数据或服务的任意数量的用户。用户504-508可以包括例如提供数据储存和检索查询和请求的终端用户、管理本文描述的系统和方法的系统管理员、与数据库交互的软件应用、以及与数据库服务管理器502交互的其他部件/设备。在如本文所示的特定实施例中,用户504-508可以发起对数据库数据的变化,并且可以请求数据库表的增量。

数据库服务管理器502可以提供支持处理平台500内的系统和部件的操作的各种服务和功能。数据库服务管理器502可以访问与存储在整个数据处理平台500中的数据相关联的存储的元数据。数据库服务管理器502可以使用元数据来优化用户查询。在一些实施例中,元数据包括存储在远程数据储存系统中的数据以及可从本地高速缓存(例如,执行平台512的一个或更多个集群内的高速缓存)获得的数据的概要。另外,元数据可以包括关于数据如何在远程数据储存系统和本地高速缓存中组织的信息。元数据允许系统和服务在不从储存设备加载或访问实际数据的情况下确定是否需要处理一段数据。

作为数据处理平台500的一部分,当使用数据操作语言(DML)对数据进行变化(该变化可以通过任何DML语句来进行)时,可以收集元数据。操作数据的示例可以包括但不限于选择数据、更新数据、使数据发生变化、合并数据以及将数据插入表中。作为处理平台500的一部分,微分区可以被创建,并且元数据可以基于每个文件和每个列来进行收集。对元数据的这种收集可以在数据摄取期间执行,或者对元数据的收集可以在数据被摄取或被加载之后作为单独的过程被执行。在实施方式中,元数据可以包括多个不同的值;多个空值;以及每个文件的最小值和最大值。在实施方式中,元数据还可以包括字符串长度信息和字符串中的字符范围。

在一个实施例中,元数据的至少一部分被存储在诸如微分区的不可变储存器中。例如,元数据可以与表数据一起存储在储存平台514上。在一个实施例中,用于表数据的相同或单独的云储存资源可以被分配并且用于元数据。在一个实施例中,元数据可以存储在本地不可变储存器中。在一个实施例中,关于不可变储存器中的元数据的信息或者关于存储在不可变储存器中的元数据文件的信息被存储在可变储存器510中。关于元数据的信息可以被引用来定位和访问存储在不可变储存器中的元数据。在一个实施例中,可以重构具有元数据储存器的系统,使得元数据储存器被替代地用来存储关于位于不可变储存器中的元数据文件的信息。

数据库服务管理器502还与执行平台512通信,执行平台512提供执行各种数据储存和数据检索操作的计算资源。执行平台512可以包括一个或更多个计算集群。执行平台512与作为储存平台514的一部分的一个或更多个数据储存设备516、518和520进行通信。尽管图5中示出了三个数据储存设备516、518和520,但是执行平台512能够与任意数量的数据储存设备进行通信。在一些实施例中,数据储存设备516、518和520是位于一个或更多个地理位置的基于云的储存设备。例如,数据储存设备516、518和520可以是公共云基础设施或私有云基础设施或任何其他方式的分布式储存系统的一部分。数据储存设备516、518和520可以包括硬盘驱动器(HDD)、固态驱动器(SSD)、储存集群或任何其他数据储存技术。另外,储存平台514可以包括分布式文件系统(例如Hadoop分布式文件系统(HDFS))、对象储存系统等等。

在一些实施例中,数据库服务管理器502和用户504-508、用于关于元数据文件(即,元数据文件元数据)的信息的可变储存器510以及执行平台512之间的通信链路经由一个或更多个数据通信网络来实现,并且可以被分配各种任务,使得用户请求可以被优化。类似地,执行平台512和储存平台514中的数据储存设备516-520之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在可替代的实施例中,这些通信链路被使用任何类型的通信介质和任何通信协议来实现。

数据库服务管理器502、可变储存器510、执行平台512和储存平台514在图5中示出为单独的部件。然而,数据库服务管理器502、可变储存器510、执行平台512和储存平台514中的每一者可以被实现为(例如,在多个地理位置处跨多个系统/平台分布的)分布式系统,或者可以被组合成一个或更多个系统。此外,数据库服务管理器502、可变储存器510、执行平台512和储存平台514中的每一者都可以根据从用户504-508接收的请求的变化和数据处理平台500的不断变化的需求而(彼此独立地)按比例放大或按比例缩小。因此,在所描述的实施例中,数据处理平台500是动态的,并且支持定期变化以满足当前的数据处理需求。

图6示出了根据一个实施例的描绘数据库服务管理器502的部件的框图。数据库服务管理器502包括耦合到数据储存设备606的访问管理器602和密钥管理器604。访问管理器602为本文描述的系统处理认证任务和授权任务。密钥管理器604管理在认证任务和授权任务期间使用的密钥的储存和认证。请求处理服务608管理接收的数据储存请求和数据检索请求。管理控制台服务610支持管理员和其他系统管理器对各种系统和过程的访问。

数据库服务管理器502还包括SQL编译器612、SQL优化器614和SQL执行器616。SQL编译器612解析SQL查询并为查询生成执行代码。SQL优化器614基于需要处理的数据来确定执行查询的最佳方法。SQL执行器616针对数据库服务管理器502接收的查询执行查询代码。查询调度器和协调器618将接收的查询发送到适当的服务或系统以用于编译、优化和分派到执行平台612。虚拟仓库管理器620管理多个虚拟仓库的操作。

另外,数据库服务管理器502包括变化跟踪管理器628,该变化跟踪管理器628管理与存储在远程数据储存设备中和本地高速缓存中的数据相关的信息。监视器和工作负载分析器624监督由数据库服务管理器502执行的过程,并管理任务(例如,工作负载)跨虚拟仓库和执行平台512中的执行节点的分布。变化跟踪管理器628以及监视器以及工作负载分析器624耦合到数据储存设备626。在一个实施例中,配置和元数据管理器622收集、存储和管理不可变储存资源中的元数据。在一个实施例中,对元数据的更新导致新的文件,并且不是就地更新的。

如本文所讨论的元数据文件可以包括包含对数据仓库中的任何数据库表的修改(例如,每项修改)的元数据的文件。对数据库表的修改可以生成一个或更多个元数据文件(通常只是单个元数据文件)。在一个实施例中,元数据文件包含以下信息:关于元数据文件的信息,其包括版本号;所有添加的表数据文件的列表;已删除的表数据文件的列表;以及关于每个添加的表数据文件的信息,其包括文件路径、文件大小、文件密钥id以及存储在表数据文件中的所有行和列的概要。

在一个实施例中,元数据文件的内容可以随时间变化。如果元数据文件的格式或内容发生变化,则元数据文件的版本号可能会增加。在一个实施例中,元数据储存器(或其他可变数据储存资源)仅存储关于元数据文件(其存储在不可变储存器中)的信息,而不存储关于表数据文件的信息。实际上,存储在元数据储存器(或其他可变储存器)中的关于元数据文件的信息非常有限,并且可能包含数千个元数据文件的数据。在一个实施例中,多达30,000个元数据文件的信息可以存储在元数据储存器或其他可变储存器中。这极大地降低了元数据储存器或其他可变储存器中所需的储存量。

在一个实施例中,对于数据库表的每项修改(例如,表数据文件的修改),系统将元数据文件写入云储存。除了添加文件和删除文件之外,对数据仓库中的数据库表的每项修改还生成一个或更多个元数据文件。通常,修改会创建单个元数据文件。然而,如果对表的修改很大(例如,向表中的插入产生非常多文件的表),可能会导致创建多个元数据文件。变化跟踪管理器628的进一步操作将结合图6-12进一步讨论。

数据库服务管理器502还包括变化跟踪管理器628,该变化跟踪管理器628管理变化跟踪历史(例如存储在表中的一个或更多个变化跟踪列)的生成。变化跟踪管理器628还管理增量报告的生成,该增量报告指示在第一时间戳和第二时间戳之间数据库表上已经发生的总变化。因为多个用户/系统可以同时访问同一数据,所以可以同步对数据的变化,以确保每个用户/系统都在使用当前版本的数据,并且有权访问数据的变化跟踪历史。

在一些实施例中还实现了安全性改善。在一个实施例中,元数据文件和变化跟踪信息被使用单独的文件密钥进行加密。在微分区中,可以使用具有不同起始计数器的AES-CTR模式对列进行单独加密。这允许数据库系统从微分区中读取单独的列,因为在不需要立刻对整个微分区进行解密的情况下对该单独的列进行解密。加密改善了安全性,因为没有人能够在没有正确的文件密钥的情况下读取微分区。

为了验证微分区没有被改动,系统可以为微分区内的每一列存储列的散列(hash)。在解密数据之前,系统将加密列的散列与该微分区的列的存储的散列进行比较。如果散列不匹配,则微分区一定已经被改动。这改善了安全性,因为微分区的所有改动都被数据库系统检测到。

图7是示出根据一个实施例的变化跟踪管理器628的部件的示意框图。变化跟踪管理器628可以收集、存储和管理关于表数据文件(即微分区)的元数据以及关于元数据文件的元数据。这样的元数据包括变化跟踪信息或表历史(包括表上已经发生的变化的日志)。变化跟踪管理器628包括表数据部件702、元数据部件704、事务数据部件706、修改数据部件708、联合部件710、变化跟踪部件712、查询部件714、加密部件716和报告部件718。部件702-718仅通过说明的方式给出,并且可能不全部被包括在所有实施例中。事实上,一些实施例可以仅包括部件702-718中的一个或两个或更多个的任意组合。例如,一些部件可以位于变化跟踪管理器628之外或与变化跟踪管理器628分离(例如在数据库服务管理器502或处理平台500内)。此外,部件702-718可以包括硬件、计算机可读指令或硬件和计算机可读指令的组合,以执行本文讨论的功能并提供本文讨论的结构。

表数据部件702存储数据库的表数据,表数据包括在一个或更多个数据库表的行和列中的信息。表数据部件702可以将表数据存储在储存资源内的微分区中。示例储存资源包括云储存和/或不可变储存。在一个实施例中,用于存储表数据文件的储存资源可以被动态分配以适应储存需求的增加或减少。表数据部件702可以通过使数据被存储在诸如云储存资源或服务的远程资源中或在诸如云储存资源或服务的远程资源中被更新来管理和存储表数据。

元数据部件704将元数据存储在诸如微分区的不可变储存器上。元数据可以包括关于或描述由表数据部件702存储的数据库的表数据的信息。在一个实施例中,元数据文件可以包括元数据(例如添加的表数据文件或删除的表数据文件的指示)。元数据可以包括表数据文件的文件信息,文件信息包括文件名称和储存位置中的一个或更多个。在一个实施例中,元数据可以存储在与表数据相同的云储存资源上的文件中。在一个实施例中,元数据部件704可以使得元数据以逐列格式存储在远程云储存中的元数据文件中。

元数据部件704还可以收集和管理在元数据文件中的元数据在不可变储存器上的储存。元数据部件704可以响应于表数据的变化,在不可变储存器中创建新的元数据文件,而不修改先前的元数据文件。新的元数据文件可以包括指示表数据中的变化的元数据。在一个实施例中,新的元数据文件中的元数据指示包括表数据的表数据文件的添加或删除。元数据部件704还可以删除过期的元数据文件。过期的元数据文件可以包括比特定年龄更老并且在由变化跟踪历史部件706存储的元数据信息中未被引用的那些元数据文件。

事务数据部件706为对表执行的每个事务生成并存储事务数据。事务数据部件706可以将事务数据与新的微分区相关联,使得事务数据作为元数据被存储在新的微分区中。这样的事务数据可以包括例如发起DML或SQL语句的用户或账户的身份、何时请求事务、何时发起事务、何时完成事务、事务如何影响表、事务修改了哪些行和/或微分区等等。

修改数据部件708存储和管理关于对表数据进行的变化的信息。例如,修改数据可以作为变化跟踪列存储在本地可变储存器中和/或存储在表数据中。在一个实施例中,修改数据可以就地存储和就地更新。在一个实施例中,修改数据存储在变化跟踪列中的不可变微分区内,该变化跟踪列指示行上发生的最新变化和/或表上已经发生的变化的日志。在实施例中,修改数据部件708将时间戳固定(secures)到在表上发生的事务,并且还将时间戳固定到在表的一个或更多个行上发生的每个变化或修改。

联合部件710将事务数据与修改数据相联合。联合部件710可以将联合的数据作为元数据存储在新的微分区中。例如,联合的数据可以存储在本地可变储存器中和/或列中的表数据中。

变化跟踪部件712确定并存储对表进行的修改的沿袭。沿袭可以被存储在本地可变储存器中和/或表数据(诸如例如变化跟踪列)中。沿袭可以包括联合的数据或修改数据。可以查询沿袭,以确定指示在第一时间戳和第二时间戳之间的净变化的增量和/或指示在第一时间戳和第二时间戳之间在表上发生的所有变化的全面的变化跟踪汇总。

查询部件714可以运行单个查询来确定表中的哪些行和/或微分区已经被变化,并进一步确定什么事务导致表的每个变化。查询部件可以针对事务数据、修改数据和/或联合的数据中的任何一个运行查询,以确定该表的全面的变化跟踪汇总。查询部件714可以被用于通过消除对确定在多个顺序的表版本对之间的变化的需要而极大地降低用于确定该表的全面的变化跟踪汇总的成本。

加密部件716被配置为对表数据和元数据进行加密。在一个实施例中,加密部件716逐列对元数据进行加密,以允许独立解密和读取特定列的元数据。

报告部件718基于由查询部件714确定的数据生成报告。该报告可以包括已经对表执行的所有事务的全面的汇总、以及这些事务如何修改在两个时间戳之间的时间。该报告还可以包括例如每个事务和/或对表的中间修改何时发生的指示、什么事务导致对表的每个中间修改的指示、表的哪些行被什么事务修改的指示、什么用户账户发起导致对表的修改的事务的指示等等。

图8是示出用于确定对数据库表进行的一系列变化的示例方法800的示意流程图。方法800可以由变化跟踪管理器628、数据库服务管理器502、处理平台500和/或其他服务或平台来执行。

方法800,在802,开始并且计算设备执行事务,以通过生成反映事务的新的微分区来修改数据库的表的微分区中的数据。在804,计算设备将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳。在806,计算设备将修改数据与新的微分区相关联,该修改数据包括由事务修改的表的一个或更多个行的指示。在808,计算设备将事务数据与修改数据相联合,以生成联合的数据。在810,计算设备查询所联合的数据,以确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。

图9是示出用于确定对数据库表进行的一系列变化的示例方法900的示意流程图。方法900可以由变化跟踪管理器628、数据库服务管理器502、处理平台500和/或其他服务或平台来执行。

方法900,在902,开始并且计算设备执行事务,以通过生成反映该事务的新的微分区并在新的微分区完全生成之后移除该微分区来修改数据库的表的微分区中的数据。在904,计算设备将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳。在906,计算设备将修改数据与新的微分区相关联,该修改数据包括由事务修改的表的一个或更多个行的指示。在908,计算设备将事务数据与修改数据相联合,以生成联合的数据。在910,计算设备查询联合的数据以通过导出在第一时间戳和第二时间戳之间的一系列顺序微分区对中的每一个顺序微分区对之间的元组粒度变化,来确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。在912,计算设备生成包括在第一时间戳和第二时间戳之间对表进行的中间修改的列表的报告。

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

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

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

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

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

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

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

示例

以下示例涉及进一步的实施例。

示例1是一种用于跟踪数据库数据的递增变化的方法。该方法包括执行事务以通过生成体现该事务的新的微分区来修改数据库的表的微分区中的数据。该方法包括将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳,以及将修改数据与新的微分区相关联,该修改数据包括被事务修改的表的一个或更多个行的指示。该方法包括将事务数据与修改数据相联合以生成联合的数据。该方法包括查询联合的数据以确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。

示例2是如示例1中的方法,其中,查询联合的数据包括查询在第一时间戳和第二时间戳之间对表执行的多个事务的联合的数据的多个条目。

示例3是如示例1-2中任一个的方法,其中,事务包括以下项中的一项或更多项:删除命令、插入命令、更新命令或合并命令。

示例4是如示例1-3中任一个的方法,其中,执行事务还包括在新的微分区完全生成之后移除微分区。

示例5是如示例1-4中任一个的方法,其中,将事务数据与新的微分区相关联包括将事务数据插入新的微分区中的事务跟踪列中,并且其中,将修改数据与新的微分区相关联包括将修改数据插入新的微分区中的变化跟踪列中。

示例6是如示例1-5中任一个的方法,其中,修改数据包括以下项中的一项或更多项:表中值的先前微分区标识、表中值的先前行标识、在表的行上发生的事务、或者表的值是否被更新的指示。

示例7是如示例1-6中任一个的方法,其中,查询联合的数据包括导出在第一时间戳和第二时间戳之间的一系列顺序微分区对中的每一个顺序微分区对之间的元组粒度变化,以确定在第一时间戳和第二时间戳之间对表进行的一系列中间修改,并且其中,一系列顺序微分区对中的每一个顺序微分区对根据时间戳进行排序(ordered)。

示例8是如示例1-7中任一个的方法,其中,仅在新的微分区完全被生成并且事务完全被执行之后,才发生将事务数据与新的微分区相关联。

示例9是如示例1-8中任一个的方法,其中,所述事务修改跨越表的多个微分区存储的表的行,并且其中,执行事务包括生成多个新的微分区,并且仅在事务完全被执行之后移除多个微分区。

示例10是如示例1-9中任一个的方法,还包括生成报告,该报告包括以下项中的一项或更多项:在第一时间戳和第二时间戳之间对表进行的中间修改的列表;每个中间修改何时发生的指示;什么事务导致每个中间修改的指示;发起对表的修改的事务修改了表的哪些行的指示;或者什么用户账户发起了发起对表的修改的事务的指示。

示例11是一种用于跟踪数据库数据的中间变化的系统。该系统包括用于执行事务以通过生成体现该事务的新的微分区来修改数据库的表的微分区中的数据的装置。该系统包括用于将事务数据与新的微分区相关联的装置,其中事务数据包括事务被完全执行时的时间戳。该系统包括用于将修改数据与新的微分区相关联的装置,该修改数据包括由事务修改的表的一个或更多个行的指示。该系统包括用于将事务数据与修改数据相联合以生成联合的数据的装置。该系统包括用于查询联合的数据以确定在第一时间戳和第二时间戳之间对表进行的递增修改的列表的装置。

示例12是如示例11中的系统,其中,用于查询联合的数据的装置被配置为查询在第一时间戳和第二时间戳之间对表执行的多个事务的联合的数据的多个条目。

示例13是如示例11-12中任一个的系统,其中,用于执行事务的装置还被配置成在新的微分区完全被生成之后从数据库中移除微分区。

示例14是如示例11-13中任一个的系统,其中,用于将事务数据与新的微分区相关联的装置被配置为将事务数据插入新的微分区中的事务跟踪列中,并且其中,用于将修改数据与新的微分区相关联的装置被配置为将修改数据插入新的微分区中的变化跟踪列中,并且其中,修改数据包括以下项中的一项或更多项:表中值的先前微分区标识、表中值的先前行标识、在表的行上发生的事务、或者表的值是否被更新的指示。

示例15是如示例11-14中任一个的系统,其中,用于查询联合的数据的装置被配置为导出在第一时间戳和第二时间戳之间的一系列顺序微分区对中的每一个顺序微分区对之间的元组粒度变化,以确定在第一时间戳和第二时间戳之间对表进行的一系列中间修改,并且其中,一系列顺序微分区对中的每一个顺序微分区对根据时间戳进行排序。

示例16是如示例11-15中任一个的系统,还包括用于生成报告的装置,该报告包括以下项中的一项或更多项:在第一时间戳和第二时间戳之间对表进行的中间修改的列表;每个中间修改何时发生的指示;什么事务导致每个中间修改的指示;发起对表的修改的事务修改了表的哪些行的指示;或者什么用户账户发起了发起对表的修改的事务的指示。

示例17是存储指令的非暂时性计算机可读储存介质,当指令由一个或更多个处理器执行时,使得该一个或更多个处理器:执行事务,以通过生成体现该事务的新的微分区来修改数据库的表的微分区中的数据;将事务数据与新的微分区相关联,其中事务数据包括事务被完全执行时的时间戳;将修改数据与新的微分区相关联,该修改数据包括由事务修改的表的一个或更多个行的指示;将事务数据与修改数据相联合以生成联合的数据;并且查询联合的数据以确定在第一时间戳和第二时间戳之间对表进行的中间修改的列表。

示例18是如示例17中的非暂时性计算机可读储存介质,其中,指令还使得一个或更多个处理器通过在新的微分区完全被生成之后从数据库中移除微分区来执行该事务。

示例19是如示例17-18中任一个的非暂时性计算机可读储存介质,其中,指令使得一个或更多个处理器通过将事务数据插入新微分区中的事务跟踪列中来将事务数据与新的微分区相关联,并且其中,指令使得一个或更多个处理器通过将修改数据插入新的微分区中的变化跟踪列中来将修改数据与新的微分区相关联,并且其中,修改数据包括以下项中的一项或更多项:表中值的先前微分区标识、表中值的先前行标识、在表的行上发生的事务、或者表的值是否被更新的指示。

示例20是如示例17-19中任一个的非暂时性计算机可读储存介质,其中,指令使得一个或更多个处理器通过导出在第一时间戳和第二时间戳之间的一系列顺序微分区对中的每一个顺序微分区对之间的元组粒度变化来查询联合的数据,以确定在第一时间戳和第二时间戳之间对表进行的一系列中间修改,并且其中一系列顺序微分区对中的每一个顺序微分区对根据时间戳进行排序。

示例21是如示例17-20中任一个的非暂时性计算机可读储存介质,其中,指令还使得一个或更多个处理器生成报告,该报告包括以下项中的一项或更多项:在第一时间戳和第二时间戳之间对表进行的中间修改的列表;每个中间修改何时发生的指示;什么事务导致每个中间修改的指示;发起对表的修改的事务修改了表的哪些行的指示;或者什么用户账户发起了发起对表的修改的事务的指示。

示例22是一种包括执行如示例1-10中的任一个的方法的器件的装置。

示例23是一种包括机器可读指令的机器可读储存器,该机器可读指令当被执行时实施示例1-10中任一个的方法或实现示例1-10中任一个的装置。

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

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

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

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

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

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

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

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

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

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

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

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号