为olap和oltp事务提供无锁读取和写入操作的内存数据库系统的制作方法

文档序号:10512208阅读:277来源:国知局
为olap和oltp事务提供无锁读取和写入操作的内存数据库系统的制作方法
【专利摘要】作为包括盘上存储和内存存储的组合的数据库系统的一部分,包括表格的多个记录被存储在多个片段中,这多个片段至少包括被保存在盘上存储中的增量片段和主片段。每个片段具有可见性数据结构以使能多版本并发控制。可利用字典压缩和n比特压缩来压缩每个片段。如果为了读取操作或写入操作片段被访问并且片段不是已经在存储器中,则这些片段被从盘上存储加载到主系统存储器中、加载在内存存储中。在多个片段中的至少一个在主系统存储器中的同时,在提供快照隔离的同时在多个片段中的至少一个上并发地执行多个无锁读取和写入操作。
【专利说明】
为OLAP和OLTP事务提供无锁读取和写入操作的内存数据库系统
技术领域
[0001]本文描述的主题涉及在提供快照隔离的同时并发地执行对于OLAP和OLTP事务两者优化的多个无锁读取和写入操作的内存(in-memory)数据库系统。
【背景技术】
[0002]内存数据库是这样的数据库管理系统:其中,数据主要被短暂存储;即存储在主存储器中。为了获得最优性能,必须将尽可能多的数据保持在存储器中。然而,考虑到并发事务的大数目,多版本并发控制(mult1-vers1n concurrency control,MVCC)机制被采用来提供对底层数据的时间点一致视图。

【发明内容】

[0003]在一个方面中,作为包括盘上存储和内存存储的组合的数据库系统的一部分,包括表格的多个记录被存储在多个片段中,这多个片段至少包括被保存在盘上存储中的增量片段和主片段。每个片段具有可见性数据结构以使能多版本并发控制。可利用字典压缩和η比特压缩来压缩每个片段。如果为了读取操作或写入操作片段被访问并且片段不是已经在存储器中,则这些片段被从盘上存储加载到主系统存储器中、加载在内存存储中。在多个片段中的至少一个在主系统存储器中的同时,在提供快照隔离的同时在多个片段中的至少一个上并发地执行多个无锁读取和写入操作。
[0004]对于增量片段中的每个记录,可利用全系统时间戳来提供快照隔离。快照隔离可基于一致视图使得行在事务内可见,一致视图进而是基于事务开始时的当前系统时间戳的。快照隔离可在事务提交时生成新的系统时间戳,使得新的系统时间戳成为行的提交标识符(ID)。对于每个片段的每个行,随着这种行被插入、更新和删除,可维护多版本并发控制(MVCC)信息。MVCC信息可至少包括每一行的创建时间戳和破坏时间戳两者。对于超载,由开放事务所创建或破坏的行可具有创建时间戳或破坏时间戳,该创建时间戳或破坏时间戳进而包含对与创建或破坏了该行的事务相对应的控制块的引用,而不是提交ID。事务可尝试读取片段中的行,对于具有从单行到整个表格不等的不同粒度水平的数据集合读取最优地确立每行的可见性,其方式是通过:将事务的一致视图的基本时间戳与行的MVCC信息相比较;或者将事务的控制块与被MVCC信息内的创建或破坏时间戳指代(referred to)的被引用事务控制块相比较。
[0005]对于每个插入、更新和删除的语句可生成日志记录。此外,基于生成的日志记录,对于重做、撤销、提交后和清除动作,对于具有从单行到整个表格不等的不同粒度的数据集合改变,可以最优地维护插入、更新和删除的行的多版本并发控制信息。
[0006]存储在盘上存储中的表格可包括表格模式元数据,该表格模式元数据表征该表格的模式并且使能在不访问系统目录的情况下执行重做、撤销、提交后和清除动作。表格数据、多版本并发控制(MVCC)信息和元数据可被存储在盘上存储中的页的链中。
[0007]增量片段的列片段的元素可通过如下方式被加载到存储器中:存储并直接加载列数据阵列(array)和字典值阵列到存储器中,并且基于列数据阵列和字典值阵列重计算形成增量片段的一部分的其它成分。多个无锁读取和写入操作可形成OLAP和OLTP事务两者的一部分。无锁读取和写入操作可包括允许并发的读取操作和写入操作,使得它们不相互阻止,写入者(writer)利用表示数据对象的版本的版本化数据结构向特定数据对象的最新版本应用改变,并且在冲突的情况下重启改变操作,并且读取者(reader)从这种数据对象的稳定的更旧版本并发地读取。版本化数据结构可用于内存存储中的数据,包括列值阵列、倒排索引、字典值阵列、字典索引、多版本并发控制(MVCC)信息和表格模式元数据。
[0008]在另一方面中,可执行内存存储中的现有增量片段和主片段的合并。合并可包括在内存和在盘上都创建新的增量片段和新的主片段,将一个或多个未提交的行从现有增量片段拷贝到新的增量片段,将一个或多个提交的行从现有增量片段和现有主片段拷贝到新的主片段,可选地对新的主片段重排序以允许数据记录的最大限度压缩的实现,利用新的增量片段和新的主片段替换现有增量片段和现有主片段,并且丢弃被替换的增量片段和主片段。
[0009]可发起包括以下各项中的至少一者的数据库管理操作:更改表格、对数据库重分区、从表格移动数据或者从表格导出数据。
[0010]也描述了存储指令的非暂态计算机程序产品(S卩,物理上具体实现的计算机程序产品),这些指令在被一个或多个计算系统的一个或多个硬件数据处理器执行时使得至少一个数据处理器执行这里的操作。类似地,也描述了计算机系统,这些计算机系统可包括一个或多个数据处理器和耦合到这一个或多个数据处理器的存储器。存储器可临时或永久地存储指令,这些指令使得至少一个处理器执行本文描述的操作中的一个或多个。此外,方法可由单个计算系统内的或者分布在两个或更多个计算系统间的一个或多个数据处理器实现。这种计算系统可被连接并且可经由一个或多个连接、经由多个计算系统中的一个或多个之间的直接连接等等来交换数据和/或命令或其它指令等等,所述一个或多个连接包括但不限于通过网络(例如,因特网、无线广域网、局域网、广域网、有线网络等等)的连接。
[0011]本文描述的主题提供了许多技术优点。例如,当前主题的有利之处在于其适用于OLTP和OLAP两者,而不会危及响应时间,同时提供了对MVCC信息(时间戳或行状态值)的无锁且高效的访问。同时,当前主题的有利之处在于其与传统技术相比要求更小的存储器足迹。
[0012]本文描述的主题的一个或多个变化的细节在附图和下面的描述中记载。本文描述的主题的其它特征和优点将从描述和图以及从权利要求中显而易见。
【附图说明】
[0013]图1是图示出商业软件系统体系结构的特征的图;
[0014]图2是图示出商业软件系统体系结构的特征的另一幅图;
[0015]图3是主存储中存储的片段的示意性表示;
[0016]图4是图示出统一表格容器页链的特征的图;
[0017]图5是图示出短暂状态下和持续状态下的成对表示的图;
[0018]图6是图示出利用统一表格执行增量合并操作和读取操作的功能框图;
[0019]图7是图示出统一表格容器的图;
[0020]图8是行位置和行标识符之间的关系的图;
[0021]图9是图示出行的临时时间戳和最终时间戳的图;
[0022I图10是图示出行状态的图;
[0023 ]图11是图示出块信息向量中的MVCC块的注册的图;
[0024]图12是图示出多版本并发控制数据的写入的过程流程图;
[0025]图13是图示出多版本并发控制数据的读取的过程流程图;
[0026]图14是图示出多版本并发控制数据的写入的图;
[0027]图15是图示出多版本并发控制数据的读取的图;
[0028]图16是图示出用于多版本并发控制的无锁索引的操作的过程流程图;
[0029]图17是由包括盘上存储和内存存储的组合的数据库系统实现的过程流程图。
[0030]各幅图中的同样的参考符号指示同样的元素。
【具体实施方式】
[0031]当前主题包括数个方面,这些方面可被单独应用或者将一个或多个这种方面组合应用,来支持一种统一数据库表格方案,该方案将内存数据库方案的性能优点与盘上数据库方案的降低的存储成本相集成。当前主题可在以下系统中实现:使用内存OLAP的数据库系统,例如包括大小为若干太字节(或更大)的数据库,具有数十亿(或更多)行的表格,等等;使用内存OLTP的系统(例如,企业资源规划或ERP系统等等),例如具有高事务量的大小为若干太字节(或更大)的数据库;以及使用盘上OLAP的系统(例如,“大数据”,用于高级分析的分析服务器、数据仓库、商业智能环境,等等),例如大小为若干拍字节或甚至更大的数据库、具有多达数万亿行的表格,等等。
[0032]另外,当前主题涉及并针对如本文所述的许多方面并且还涉及并针对如与本申请同时于2014年11月25日递交的以下专利申请(这些申请中的每一个在此被通过引用完全并入)中所述的许多方面:美国专利申请序号14/553,833,标题为:“Efficient DatabaseUndo/Redo Logging” ;美国专利申请序号14/553,571,标题为:“Migrat1n of UnifiedTable Metadata Graph Nodes” ;美国专利申请序号 14/553,494,标题为:“DatabaseSystem With Transact1n Control Block Index” ;美国专利申请序号 14/553,535,标题为:“Delegat1n of Database Post-Commi t Processing” ;美国专利申请序号 14/553,606,标题为:“Variable Sized Database Dict1nary Block Encoding” ;美国专利申请序号 14/553,680,标题为:“Efficient Block-Level Space Allocat1n for Mult1-Vers1nConcurrency Control Data” ;美国专利申请序号 14/553 ,723,标题为:“DatabaseLockless Index for Accessing Mult1-Vers1n Concurrency Control,,;美国专利申请序号 14/553,654,标题为:“Vers1ned Insert Only Hash Table For In-MemoryColumnar Stores” ;美国专利申请序号 14/553 ,790,标题为:“Supporting CursorSnapshot Semant ics” ;美国专利申请序号 14/553,215,标题为:“Transient andPersistent Representat1n of a Unified Table Metadata Graph” ;美国专利申请序号14/553,435,标题为:“N_Bit Compressed Vers1ned Column Data Array for In-MemoryColumnar Stores” ;美国专利申请序号 14/552 ,902,标题为:“Altering Data Type of aColumn in a Database” ;美国专利申请序号 14/552,914,标题为:“Applying a DatabaseTransact1n Log Record Directly to a Database Table Container,,;美国专利申请序号 14/553,859,标题为:“Dual Data Storage Using an In-Memory Array and an On-Disk Page Structure” ;美国专利申请序号14/553,872,标题为:“Materializing DataFrom an In-Memory Array to an On-Disk Page Structure” ;美国专利申请序号 14/553,844,标题为:“Optimized Rollover Processes to Accommodate a Change in ValueIdentifier Bit Size and Related System Reload Processes” ;美国专利申请序号 14/553,878,标题为:“Fast Row to Page Lookup of Data Table Using Capacity Index,,;美国专利申请序号 14/553,892,标题为:“Forced Ordering Of A Dict1nary StoringRow Identifier Values” ;美国专利申请序号62/084,500,标题为:“Garbage Collect1nof Vers1ns Driving the Garbage Collect1n of Mult1-Vers1n ConcurrencyControl Time Stamps” ;美国专利申请序号 14/553,901,标题为:“Garbage Collect1n ofMult1-Vers1n Concurrency Control(MVCC)Data Blocks” ;美国专利申请序号 14/553,276,标题为:“Synchronized Backup and Recovery of Database Systems” ;美国专利申请序号14/552,897,标题为:“Inverted Indexing” ;美国专利申请序号14/552,905,标题为:“Vers1ned Bloom Filter” ;美国专利申请序号14/552,808,标题为:“Transact1nControl Block for Multivers1n Concurrency Commit Status,,;美国专利申请序号 14/553,226,标题为:“Set-Oriented Visibility State Retrieval Scheme” ;美国专利申请序号 14/553,548,标题为:“Exporting and Importing Database Tables in a Mult1-User Database Environment” ;美国专利申请序号62/084,065,标题为:“Transact1nalTable Replicat1n” ;以及美国专利申请序号 62/084,173,标题为:“DistributedTransact1n Commit Protocol,,。
[0033]当前主题可实现为企业资源规划(enterprise resource planning,ERP)系统的核心软件平台、其它商业软件体系结构或者在特定组织的控制下的一个或多个处理器上运行的其它数据密集型计算应用或软件体系结构。这个布置对于如下的大规模组织可能是非常有效的:这些组织具有非常富有经验的内部信息技术(IT)职员,并且对于这些组织,在定制市售的商业软件解决方案以结合组织特定的业务过程和功能一起工作所需要的计算硬件和咨询服务上的相当大的资本投入是可行的。图1示出了符合这种实现方式的系统的图100。计算系统110可包括提供商业软件系统的一个或多个特征的一个或多个核心软件平台模块120。该计算系统也可聚合或以其它方式提供一网关,经由该网关,用户可访问由一个或多个外部软件组件130提供的功能。客户端机器140可经由直接连接、本地终端或者通过网络150(例如,局域网、广域网、无线网络、因特网,等等)访问该计算系统。
[0034]数据库管理代理160或其它相当的功能可访问数据库管理系统170,数据库管理系统170存储数据并提供对数据的访问(所述数据例如,业务场景、业务过程和一个或多个业务配置的定义,以及与业务场景、业务过程和一个或多个业务配置的定义有关的数据、元数据、主数据等等,和/或与业务场景或业务过程的特定实例相关的数据对象和/或业务对象的具体实例,等等)。数据库管理系统170可包括至少一个表格180,并且还包括符合本文描述的那些的并行化特征。
[0035]图2示出了图示可包括在符合当前主题的实现方式的数据库或数据库管理系统中的特征的体系结构200的框图。可被保存(retain)在多个数据卷204之间的表格数据存储202可包括以下各项中的一个或多个:增量存储206(例如,分页增量部分,其可以可选地是OLTP优化的并且可以可选地包括合并过程208)、索引存储212(例如,一个或多个分段索引)以及主存储210。主存储210可包括符合本文描述的特征的分成片段的主部分。增量存储206可包括为这种增量存储206内的行存储MVCC数据的MVCC存储207,并且类似地,主存储210可包括为这种主存储210内的行存储MVCC数据的MVCC存储211 (有时也称为行可见性信息,例如像图7中那样)。
[0036]为了实现最佳可能压缩并且也为了支持非常大的数据表格,表格的主部分可被划分成一个或多个片段。图3示出了主存储210中存储的各种片段的示意性表示300。一个或多个主片段或片段330可用于数据库的每个表格或列。小的、易管理的表格可利用单个片段来表不。非常大的表格可被分割成两个或更多个表格分区335。每个表格分区进而可包括两个或更多个片段330。片段330可以是其所属的表格的水平切片。每个片段330可包括一个或多个列片段340。每个列片段340可具有符合本文描述的特征的其自己的字典和值ID阵列。
[0037]片段330可有利地充分大以获得由于片段的最优化压缩以及聚合和扫描的高内存性能而产生的最大性能。相反,这种片段可充分地小以将任何给定片段的最大列加载到存储器中并且在内存对该片段排序。片段也可充分地小以能够将两个或更多个部分为空的片段合并成更小数目的片段。作为这个方面的说明性而非限制性的示例,一片段可包含十亿行,其中每列最多有100GB的数据。其它片段大小也在当前主题的范围内。片段可以可选地包括页的链。在一些实现方式中,列也可包括页的链。列数据可例如利用字典和/或任何其它压缩方法来加以压缩。表格片段可被实体化在内存的连续地址空间中以获得最大性能。数据库的所有片段可被存储在盘上,并且对这些片段的访问可基于对查询的数据访问要求的分析来作出。每个片段将具有其自己的MVCC页的集合,这些MVCC页容宿着存储用于确定行的可见性的(行状态或时间戳信息)元数据的MVCC块。MVCC数据是与实际列数据一起存储的元数据,与读取快照时间戳一起使用来用于确定行的可见性。事务管理器230可耦合到主存储210(和相应的MVCC存储211)以及增量存储206(和相应的MVCC存储207)以与MVCC数据一起提供用于读取操作的快照时间戳(这进而提供用于相应行的可见性数据)。
[0038I 再次参考图2,体系结构200的其它部分可包括数据操纵语言(data manipulat1nlanguage,DML)处理模块或类似功能214、一个或多个查询处理模块或类似功能216(例如包括多版本并发控制)、支持索引存储212的索引构建器220、查询语言引擎222(其可以例如是SQL引擎)、用于接收来自用户226的输入的复杂事件处理模块(例如,事件处理程序、流处理模块,等等)224,等等。
[0039]图4示出了图示统一表格容器页链400的示例的框图。虽然图4图示了单个页链400,但可以使用多个页链。在一些实现方式中,可以层次化地布置多个页链。如上所述,每个片段可以可选地包括页的链。一般地,容器可被表示为至少一个页链。每个页链一般可被表征为以给定顺序链接的页的集合。本文使用的术语“页”指的是数据库中的存储的基本单位。页大小一般是在构建数据库时确立的并且通常不能被改变。代表性的页大小可以是2kB、4kB、8kB、16kB等等级别的。一旦构建了服务器,该值通常就不能被改变。不同类型的页可存储不同类型的数据库对象。例如,数据页可以为表格存储数据行或列。索引页可以为索引的一个或多个级别存储索引行。大对象(large object,L0B)页可以为文本和图像列、为Java行外列等等存储数据。
[0040]也如图4中所示,可对增量部分、主部分、字典、MVCC数据、索引段(可选,在图2中没有示出)等等定义页链的子链,使得这些实体中的每一者的“整体”包含一个或多个页。在当前主题的一些实现方式中,增量部分可包括“热”增量片段402和“冷”增量片段404两者,这两者可分开存储。此外,增量部分也可包括用于MVCC数据的MVCC子链406。主部分也可被再分成主片段330并且可包括MVCC子链408。包含字典压缩列式数据410的页可以指为它们包含字典的页。个体表格部分可根据需要被加载到主存储器中。合并过程可与事务处理解除耦合,使得合并过程可在恢复时(例如在日志重放期间)执行。页链,例如图4中所示的示例,可由容器目录条目(container directory entry,CDE)412发起。
[0041]参考图5的图500,表格510可被加载到数据库170的存储器中。表格510可包括片段向量520,片段向量520是每个可指代不同的片段53(h...n的暂态句柄(例如,指针、引用等等)的阵列。表格510也可包括到形成页链530^(与图4的页链400类似)的一部分的第一页540!的暂态句柄(例如,指针、引用等等)。第一页54(h可包括持续性表格描述符550,其是表格的树结构的根,描述了该表格的每个列、片段、页链和/或其它结构。描述表格的结构的对象的树被存储在页链内。每个片段53(^1可包括到其持续性描述符相应对象句柄,其将存储器中的底层页54(hi钉住(pin)。此处的“钉住”指的是相应的存储器不能被置换出(swap out)。具体地,相应的对象句柄可指向标识关联页540的哪个部分对应于这种片段530的持续性片段描述符53(h...n。在一些情况中,每个页540可以有多个片段530。
[0042]将会明白,带着一些变化,图500是一种简化,因为在层次的不同级别上可以有许多不同的对象。在第一级别,片段530可与列片段具有1:n关系。表格510可与(表征列片段等等的)列描述符具有1:n关系。列片段可与列描述符具有η:1关系。与用于增量和主的字典有关的其它对象也可具有成对的暂态/持续表示。元数据图中的所有持续性元数据描述符具有其各自的暂态对象,这些暂态对象经由对象句柄指向它(并从而将其钉住在存储器中)。
[0043]单个RowID空间可在页链中跨页使用。一般指代数据库中的逻辑行的RowID可用于指代数据库的内存部分中的逻辑行并且也指代数据库的盘上部分中的物理行。行索引通常指的是表格中的行的物理的基于O的索引。基于O的索引可用于对连续阵列中的行物理寻址,其中逻辑RowID表示行的逻辑顺序,而不是物理位置。在一些内存数据库系统中,用于数据记录位置的物理标识符可被称为UDIV或DocID或者RowPos。与逻辑RowID不同,UDIV或DocID或者RowPos (或者相当的参数)可指示行(例如数据记录)的物理位置,而RowID指示逻辑位置。为了允许表格的分区具有符合当前主题的实现方式的单个RowID和行索引空间,对于新插入的记录以及对于跨片段的更新记录的新版本,RowID可被指派单调递增的ID。换言之,例如,更新记录将改变其RowID,因为更新实际上是(具有RowID的)旧记录的删除和(具有新RowID的)新记录的插入。利用此方案,表格的增量存储可按RowID来排序,这可用于访问路径的最优化。分开的物理表格实体可按分区来存储,并且这些分开的物理表格实体可在查询级别被连接成逻辑表格。
[0044]当在列式合并操作期间执行最优化压缩以将增量存储中记录的改变添加到主存储时,表格中的行一般被重排序。换言之,合并操作之后的行通常不再是按其物理行ID排序的。因此,根据当前主题的一个或多个实现方式可使用稳定的行标识符。稳定行标识符可以可选地是逻辑RowID。对稳定的逻辑(而不是物理)RowID的使用可允许在预写式日志和事务撤销日志中的REDO/UNDO条目中寻址行。此外,以这种方式可促进跨合并稳定、而不会保持对数据库的旧主版本的引用的光标。为了使能这些特征,可存储内存逻辑RowID到物理行索引的映射和相反方向的映射。在当前主题的一些实现方式中,RowID列可被添加到每个表格。RowID列在当前主题的一些实现方式中也可服从压缩。
[0045]图6示出了用于在统一表格上执行增量合并操作610的功能框图600。新的事务或改变可最初被写入到增量存储206中。主存储610可包括一个活跃片段612和一个或多个关闭片段616。当更新被从增量存储206合并到主存储210中时,关闭片段616中的现有记录不能被改变。反而,记录的新版本可被添加到活跃片段612,并且旧版本可被标记为无效。
[0046]功能框图600也图示了读取操作620。一般地,读取操作可具有对所有片段(S卩,活跃片段612和关闭片段616)的访问。可通过仅加载包含来自特定查询的数据的片段来优化读取操作。不包含这种数据的片段可被排除。为了做出此决定,可对每个片段存储容器级元数据(例如,最小值和/或最大值)。可将此元数据与查询相比较来判定片段是否包含请求的数据。
[0047]图7是图示出统一表格容器的图700,该统一表格容器包括暂态部分(S卩,加载到存储器中的数据)和持续部分,在该持续部分中多个页被存储在物理存储中(即,页被存留)。对象可表示存储器中的表格并且可被组织成树,该树可以以表格头部对象702为根并且被锚指针704指向。锚指针704可用于指向表格的根对象。表格头部对象像所有版本化对象一样可具有引用计数。元数据706可表征关于由头部对象702表示的表格的各种方面(S卩,定义表格列及其数据类型、约束,等等)。表格可链接到页向量对象708,页向量对象708进而又(经由页句柄)链接到(从物理持续存储)加载在存储器中的内存表格的多个页7101...n (在此示例中其被链接到第一页710jP第二页7102)。页句柄将加载的页钉住在存储器中。通过诸如互斥锁之类的某种手段可针对并发访问同步对内部结构的修改。
[0048]再次参考图7,对于读取者712对对象图的每个相应的读取操作,根对象(例如,表格702)的引用计数可被递增(其中根对象的引用计数I最初反映指向根对象702的单个锚指针704)。随后,对象中的一个或多个被改变。不兼容的改变导致根对象702、至少一个被改变的对象和对象的层次体系内的任何居间的对象被克隆(例如,表格716)。锚指针706于是可链接到克隆的根对象(表格716)。根对象702可稍后在根对象的引用计数是零时被丢弃。此夕卜,对象图被遍历,开始于根对象702,并且结束于至少一个被改变的对象,去除这种对象的任何边缘。具有为零的引用计数的每个对象随后被丢弃。包括与读取操作有关的完全序列在内的关于统一表格容器的更多细节可在标题为“Lock-Free,Scalable Read Access toShared Data Structures”的美国专利申请公开号20140025651中找到,其内容在此被通过引用完全并入。
[0049]参考图8的图800,如数据库180所使用的,RowID是表格中的标识符行。无论该行是在增量存储206中还是在主存储210中,RowID都保持相同,但RowID保持相同。RowID被存留。与之不同,rowPOS指的是增量存储206或主存储210的列向量中的行的索引。rowPos是容器本地的(即(^1丨&2/(161丨3/1]^;[11)并且在增量合并操作之后将会变化。1'(^?03可被加载在存储器中。可基于rowPos值来维护MVCC数据。每个rowPos可被映射到MVCC页中的一个槽,用于检索其关联信息。
[0050]数据库170可使用能够在并发环境中提供无锁读取和写入的版本向量。利用这种布置,客户端在尝试存储新的数据元素之前可检查与版本化向量相关联的数据对象的大小并且如果必要则增大数据对象的大小。增大版本化数据对象可创建具有适当大小要求并且与版本化向量头部(例如,引用该数据对象和版本的头部等等)挂钩的数据对象的新版本。利用此布置,使用数据对象的先前版本的任何并发读取者仍将读取其自己的版本(其是一致的)。数据对象的旧版本在所有的读取者完成其工作之后被进行垃圾收集(即,与这种对象相关联的存储器被垃圾收集器释放,等等)。
[0051]版本化向量也可提供附加API来存储向量中的数据并且确保任何新数据都将被写入到数据对象的所有版本。例如,任务Tl在将其值附加到具有大小10的向量并且另一任务T2也在尝试在同一槽(最末元素)处附加,然后任务之一创建数据对象的新版本。为了使得两个写入都为可见的,版本化向量可在完成写入之后检查数据对象的最新版本。如果在数据对象的版本中有任何变化,则其将会把该数据拷贝到新版本。
[0052]图9是图示出MVCC时间戳的图900。在此示例中,时间戳包括64比特值,该64比特值可包括临时时间戳910(如初始比特所指示)或最终时间戳920(如初始比特所指示)。临时时间戳910可包括标识相应事务的事务控制块(transact1n control block,TCB)索引,以及可由SQL引擎指派的语句序列号(statement sequence number ,SSN) JCB索引例如可消耗31比特,并且SSN可消耗32比特。最终时间戳920可包括可从TCB获得的提交时间戳。事务可最初写入具有相应TCB索引的临时时间戳910。在相应的线程提交之后,提交后线程可利用最终时间戳920来替换临时时间戳910。利用这种布置,64比特读取和写入可通过原子操作来执行。另外,仅初始比特可用于区分临时时间戳和提交时间戳。
[0053]参考图10的图1000,MVCC数据可具有表征行的当前状态的各种行状态。此行状态是除了诸如CTS和DTS之类的时间戳之外附加的,其中CTS是插入了该行的事务的提交时间戳(64比特值),DTS是删除了该行的事务的提交时间戳(64比特值)。行状态(有时称为RowState)可以是如下的两比特值:
[0054]a.00-不可见
[0055]b.01-CHECK_CTS
[0056]c.10-可见
[0057]d.ll-CHECK_CTS_DTS
[0058]再次参考图10,最初,行在1010在其使用之前具有不可见行状态(比特值10)。未使用的行可具有最大CTS和DTS值来指示这一点。接下来,在1020,插入事务使得行状态变成CHECK_CTS(比特值01)。如果插入事务随后被清除(S卩,该事务有清除操作的资格,因为在系统中没有其可见性将不允许该事务进行的改变的读取者/客户端,等等),则在1030,行状态变成可见(比特值10),这允许了相应的行完全可视。如果行被删除(在被清除之前或者在以后),则在1040,行状态将被改变成CHECK_CTS_DTS(比特值11),这表明两个时间戳都需要被分析来确定行有效的时间窗口。然后,每当系统的minRead时间戳大于删除事务提交时间戳时行删除就被清除,并且行可被发送到垃圾收集作为清除操作的一部分,这使得在1050行状态随后成为不可见(比特值10)。在被垃圾收集的行状态下,CTS和DTS值可以是零。
[0059]每个MVCC块可具有头部。这种头部在第一部分中可包括类属块头部,并且在第二部分中可包括MVCC特定数据。类属块头部可封装诸如块版本、块类型和块大小之类的信息。类属块头部对于MVCC数据块以及字典块可具有共同结构。MVCC特定数据可封装包括例如起始行位置(RowPos)、活跃单元的数目、最小时间戳和标志的信息,该标志指示出MVCC块的状态,指定其由于由资源限制差错引起的提交后操作或者早先的部分清除而需要特殊的处理。为了垃圾收集可跟踪活跃单元的数目。如果此值变为0,则该块将被垃圾收集(S卩,与该块相关联的存储器将被清除并释放,等等)。此外,最小时间戳表示对块中的最小时间戳(非O)的跟踪,这可被表格级垃圾收集API用于跳过不必要的块。
[0060]MVCC数据可以被存留并可被存储在MVCC页中(MVCC页可例如从常规块页得出,但带有MVCC标签)并且可例如具有256K的大小C3MVCC数据可通过将rowPos索引到MVCC页中的块来寻址。随后可按块存储日期。这些块可具有变化的大小。在一个示例中,块可以是8K加上MVCC块头部的大小。时间戳块可包括CTS和DTS。在一个示例中,时间戳块可保持IK条目,8字节值。RowState块可例如保持32K条目,其中每行2比特。存根块可包括STUB_CTS、STUB_DTS和STUB_RESERVED并可例如是32字节并且它们可充当来自垃圾收集范围的占位符(SP,行的范围是完全可见/不可见的)。
[0061]可以使用块以便执行原子操作并且存储可利用按比特操作来索引的数据。例如,8K数据可通过rowPos的移位(对于TS的10比特或者对于RS的15比特)来容易地寻址。另外,比特移位运算比乘法、除法或模运算更高效。
[0062]MVCC块可具有能够将rowPos映射到块的索引结构。这种索引结构可提供无锁读取和写入操作。另外,索引结构可被动态地生长(grow),使得其可在分配新块的同时增大结构的大小。此外,MVCC索引结构的有利之处在于其允许了一致的读取,同时动态地生长了结构。索引结构可使用在API中具有额外逻辑的版本化向量[头部,版本化数据对象],其可存储MVCC信息。
[0063]MVCC块可由能够利用原子操作存储的最低限度信息来表示。例如,MVCC块头部可以是不能利用原子API存储的32字节。因此,本文称为块句柄(或有时称为BlockHandle)的结构可被存储在版本化向量中。在一些情况中,块句柄可以是16字节。因为没有支持32字节原子操作的指令,所以MVCC块头部不能被存储在用于索引MVCC块的版本化向量中。然而,BlockHandle的大小为16字节并且指令支持128比特原子操作可用于将BlockHandle存储在版本化向量中。因此,BlockHandle(其是MVCCBlockHeader上的包装器)可被存储在版本化向量中。块句柄可包括到相应块的指针和到与该块相关联的页的句柄。如上文所指出的,MVCC块可采取16字节结构并且是利用由intel SSE 4.2指令提供的128比特原子写入操作(CAS)(利用双字原子操作)来写入的。
[0064]行位置(rowPos)可用于确定MVCC块内的MVCC单元的位置。最初,对于rowPos X的时间戳信息,块索引,即保持与rowPos相关联的MVCC块的版本化向量中的槽:(X》10)[8K =I K* 8字节时间戳值],在块中有偏移量(S卩,这是从是1 2 4的倍数的r ο ?Po s开始的块内的rowPos的位置):(X&1023) orowPos X的行状态(rowState)信息可利用块索引来确定:(X>>15)[32K条目(2比特每行):8K字节],在块中有偏移量:[Y = RSWord((X&(2~15-l))>>5)[SP,保持rowPos X的2比特行状态信息的行状态块中的字],RS = (Y? ((X&31)〈〈 I))&0x3)(即,在保持32行行状态信息的行状态字内,只有此rowPos X感兴趣的2比特需要被提取)]。在一个特定示例中,对于行位置(rowPos) 1250,时间戳在块索引I处,具有偏移量226。行状态(rowState)信息是块索引=0 ,RSfford = block[39] ,RS = (RSfford>>( (120&31 )<<1) )&0x3)。
[0065]图11是图示出包含块句柄的块信息向量1110(其也可被表征为索引结构)中的MVCC块的注册的图11OO。最初,线程I是块X,被分配块信息向量1110内的第一位置(S卩,到块X的块句柄被写入到第一位置)。随后,线程2尝试在同一位置分配块Y,然而,块Y被移动到空闲块(即,到块Y的块句柄被写入到空闲块),因为线程I已经对于相同范围的行位置注册了块X。然而,线程2可将块X用于写入数据。
[0066]图12的图1200图示了(对于rowPosX)尝试写入MVCC时间戳或行状态的客户端的过程。最初,在1210,对于给定的rowPos X可计算块索引(idx)。然后,在1220,可保留具有idx的版本化向量中的空间。如果向量的大小〈idx,则其无操作(S卩,操作被终止),否则版本向量idx中的空间被保留。接下来,在1230,可从数据对象的最新版本获得与idx相关联的块句柄。如果块句柄不是有效的,则在1240,可利用高效块分配算法来分配新的MVCC块(对于给定的类型),并且可将该新的块句柄注册在用于索弓IMVCC块的版本化向量中、槽idx处。否贝IJ,接下来,在1250,如果线程分配新块,则可从版本化向量获得与idx相关联的块句柄。这可能是必需的,因为可能有多个客户端在对相同范围的rowPos分配块并且只有一个线程能够成功地将其块注册在版本化向量中。此外,块句柄可被注册在版本化向量中(即,索引结构)。
[0067]随后,在1260,可计算与块句柄相关联的块中的rowPosX的偏移量。在1270,可利用块句柄中的块指针作为起始偏移量即偏移量O,来存储以上计算的偏移量处的时间戳值。例如,时间戳可以是被作为原子数据类型(像long那样)写入的8字节值。RowState需要使用CAS操作的额外处理来确保与相同行状态字相关联的其它行的并发线程设置行状态将不会覆盖rowPos X的行状态。
[0068]然后,在1280,与该块句柄相关联的页可被弄脏(dirty)(即,为垃圾收集作好准备,等等)。接下来,在1290,可以检查来自最新版本化数据对象的块句柄,并且如果其与上述不相同,则过程可从1230起重复。大多数时间,版本化向量写入API确保了新数据在所有版本化数据对象中可用,但对于随机写入,客户端也需要确保数据在数据对象的所有版本中可用。用于从最新版本化数据对象得到块句柄的API由于其它线程对版本化向量的并发生长可等待更短的持续时间(不显著)。此外,可确保任何最新版本化数据对象反映了写入线程所分配的新块。
[0069]图13的图1300图示了(对于rowPOSX)尝试读取MVCC时间戳或行状态的客户端的过程。最初,在1310,可计算给定的rowPos X的块索引(idx)。接下来,在1320,可对照idx检查与MVCC块相关联的版本化向量的大小。如果其未被版本化向量所覆盖,则返回无效值(即,对于时间戳是最大时间戳并且对于行状态块是R0WSTATE_INVISIBLE)。然后在1330可从数据对象的最新版本获得与idx相关联的块句柄。如果块句柄不是有效的,则在1340,可返回无效值(即,对于时间戳块是最大时间戳,对于行状态块是R0WSTATE_INVISIBLE,等等)。随后,在1350,可计算与块相关联的块中的rowPos X的偏移量。最后,在1360,可利用块句柄中的指针作为偏移量O来读取计算出的偏移量的值。对于时间戳值,可返回在该偏移量处存储的8字节值。对于行状态,只有状态((:!^(:1(_(^3、¥13181^、(:!^(:1(_(^3_0了3和INVISIBLE)可基于位于行状态字上的2比特被返回。
[0070]图14是图示出统一表格片段1410中的写入操作(插入和删除两者)的图1400。最初,客户端试图在统一表格片段1410的行2000处插入条目。随后访问相应的MVCC对象1420,其进而指向第一块1430(第一块1430形成MVCC页1460的一部分)。第一块1430包括表征行的特定状态(在此情况中其示为可见)的行状态向量1435。然后,插入完成并且链接的第二块1440中的CTS向量1445被用与插入操作被提交的时间相对应的时间戳来更新,然后行状态向量1435中的行状态被更新来反映这一点。
[0071]对于删除操作,客户端试图在统一表格片段1410的行1800处删除条目。然后,访问MVCC对象1420 (不一定是插入操作中使用的那同一个对象),该MVCC对象1420进而指向第一块1430(形成MVCC页1460的一部分)。第一块1430包括表征行的特定状态(在此情况中其将该行示为可见)的行状态向量1435。在1800处的条目被删除之后,链接的块1450中的DTS向量1455被用相应的时间戳来更新。
[0072]图15是图示出读取操作的图1500。最初,在统一表格片段1410上发起选择操作。然后,访问MVCC对象1420以为一个或多个适用的行确定行状态。经由位于基于链接到MVCC对象1420的rowPos值1430计算出的块索引处的块利用行状态向量1435来识别行状态。取决于行状态信息,访问检查CTS向量(经由块1440)和/或检查DTS向量1455(经由块1450)中的一个或多个来得到相应的时间戳以基于与一致视图相关联的读取快照时间戳计算行的可见性。
[0073]图16是过程流程图1600,其中在1610,发起数据库的表格的一行上的操作。然后,在1620,访问多版本并发控制(MVCC)对象以识别与该行相关联的第一块。随后,在1630,访问第一块以为该行确定行状态。可基于计算出的块索引和块内的偏移量(其可利用行位置值来计算)来访问第一块(其可在任何位置)。另外,基于行状态,在1640,访问至少一个其它块以为该行获得至少一个时间戳。随后,在1650,存储该至少一个时间戳。在前文中,术语“第一 ±夬”简单地指所识别的第一块,而不要求这种块的任何特定位置。
[0074]图17是过程流程图1700,其中在1710,作为包括盘上存储和内存存储的组合的数据库系统的一部分,包括表格的多个记录被存储在多个片段中,这多个片段至少包括被保存在盘上存储中的增量片段和主片段。每个片段具有可见性数据结构以使能多版本并发控制。可选地,每个片段可在1720被利用字典压缩和η比特压缩来加以压缩。在1730,如果为了读取操作或写入操作片段被访问并且片段不是已经在存储器中,则这些片段被从盘上存储加载到主系统存储器中、加载在内存存储中。然后,在1740,在多个片段中的至少一个在主系统存储器中的同时,在提供快照隔离的同时在多个片段中的至少一个上并发地执行多个无锁读取和写入操作。
[0075]对于增量片段中的每个记录,可利用全系统时间戳来提供快照隔离。快照隔离可基于一致视图使得行在事务内可见,一致视图进而是基于事务开始时的当前系统时间戳的。快照隔离可在事务提交时生成新的系统时间戳,使得新的系统时间戳成为行的提交标识符(ID)。对于每个片段的每个行,随着这种行被插入、更新和删除,可维护多版本并发控制(MVCC)信息。MVCC信息至少可包括每一行的创建时间戳和破坏时间戳两者。对于超载,由开放事务所创建或破坏的行可具有创建时间戳或破坏时间戳,该创建时间戳或破坏时间戳进而包含对与创建或破坏了该行的事务相对应的控制块的引用,而不是提交ID。事务可尝试读取片段中的行,对于具有从单行到整个表格不等的不同粒度水平的数据集合读取最优地确立每行的可见性,其方式是通过:将事务的一致视图的基本时间戳与行的MVCC信息相比较;或者将事务的控制块与被MVCC信息内的创建或破坏时间戳指代的被引用事务控制块相比较。
[0076]对于每个插入、更新和删除的语句可生成日志记录。此外,基于生成的日志记录,对于重做、撤销、提交后和清除动作,对于具有从单行到整个表格不等的不同粒度的数据集合改变,可以最优地维护插入、更新和删除的行的多版本并发控制信息。
[0077]存储在盘上存储中的表格可包括表格模式元数据,该表格模式元数据表征该表格的模式并且使能在不访问系统目录的情况下执行重做、撤销、提交后和清除动作。表格数据、多版本并发控制(MVCC)信息和元数据可被存储在盘上存储中的页的链中。
[0078]增量片段的列片段的元素可通过如下方式被加载到存储器中:存储并直接加载列数据阵列和字典值阵列到存储器中,并且基于列数据阵列和字典值阵列重计算形成增量片段的一部分的其它成分。多个无锁读取和写入操作可形成OLAP和OLTP事务两者的一部分。无锁读取和写入操作可包括允许并发读取操作和写入操作,使得它们不相互阻止,写入者利用表示数据对象的版本的版本化数据结构向特定数据对象的最新版本应用改变,并且在冲突的情况下重启改变操作,并且读取者从这种数据对象的稳定的更旧版本并发地读取。版本化数据结构可用于内存存储中的数据,包括列值阵列、倒排索引、字典值阵列、字典索引、多版本并发控制(MVCC)信息和表格模式元数据。
[0079]在另一方面中,可执行内存存储中的现有增量片段和主片段的合并。合并可包括在内存和在盘上都创建新的增量片段和新的主片段,将一个或多个未提交的行从现有增量片段拷贝到新的增量片段,将一个或多个提交的行从现有增量片段和现有主片段拷贝到新的主片段,可选地对新的主片段重排序以允许数据记录的最大限度压缩的实现,利用新的增量片段和新的主片段替换现有增量片段和现有主片段,并且丢弃被替换的增量片段和主片段。
[0080]可发起包括以下各项中的至少一者的数据库管理操作:更改表格、对数据库重分区,将数据从表格移动或者将数据从表格导出。
[0081]本文描述的主题的一个或多个方面或特征可在数字电子电路、集成电路、特殊设计的专用集成电路(applicat1n specific integrated circuit,ASIC)、现场可编程门阵列(field programmable gate array,FPGA)、计算机硬件、固件、软件和/或其组合中实现。这些各种方面或特征可包括在可编程系统上可执行和/或可解释的一个或多个计算机程序中的实现方式,该系统包括至少一个可编程处理器,该处理器可以是专用或通用的,其被耦合来从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令并且向它们发送数据和指令。可编程系统或计算系统可包括客户端和服务器。客户端和服务器一般可彼此远离并且通常通过通信网络来交互。客户端和服务器的关系是由于计算机程序在相应计算机上运行且相互之间具有客户端-服务器关系而发生的。
[0082]这些计算机程序一一也可称为程序、软件、软件应用、应用、组件或代码一一包括用于可编程处理器的机器指令,并且可以用高级别过程语言、面向对象的编程语言、功能性编程语言、逻辑编程语言和/或用汇编/机器语言来实现。当在本文中使用时,术语“机器可读介质”指的是用于向可编程处理器提供机器指令和/或数据的任何计算机程序产品、装置和/或设备,诸如例如磁盘、光盘、存储器和可编程逻辑器件(Programmable Logic Device,PLD),包括以机器可读信号的形式接收机器指令的机器可读介质。术语“机器可读信号”指的是用于向可编程处理器提供机器指令和/或数据的任何信号。机器可读介质可非暂时地存储这种机器指令,诸如例如像非暂态固态存储器或磁性硬盘驱动器或者任何等同的存储介质那样。机器可读介质可以替换地或额外地以暂态方式存储这种机器指令,诸如例如像与一个或多个物理处理器核心相关联的处理器缓存或其它随机访问存储器那样。
[0083]为了支持与用户的交互,本文描述的主题的一个或多个方面或特征可在具有诸如例如阴极射线管(cathode ray tube,CRT)或液晶显示器(liquid crystal display,IXD)或发光二极管(light emitting d1de,LED)监视器之类的用于向用户显示信息的显示设备以及用户可用来向计算机提供输入的键盘和诸如例如鼠标或轨迹球之类的指点设备的计算机上实现。其它种类的设备也可用于支持与用户的交互。例如,向用户提供的反馈可以是任何形式的感官反馈,诸如例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括但不限于音响、话音或触觉输入。其它可能的输入设备包括一一但不限于一一触摸屏或其它触摸敏感设备,例如单点或多点电阻或电容触控板、语音识别硬件和软件、光学扫描仪、光学指示器、数字图像捕捉设备和关联的解释软件,等等。
[0084]在以上描述中和权利要求中,诸如“……中的至少一者”或者“……中的一个或多个”之类的短语可在后跟元素或特征的连接列表的情况下出现。术语“和/或”也可出现在两个或更多个元素或特征的列表中。除非与其所用于的上下文隐含地或明确地矛盾,否则这种短语打算意指任何列出的元素或特征单独地或者任何记载的元素或特征与任何其它记载的元素或特征相结合。例如,短语“A和B中的至少一者”、“A和B中的一个或多个”和“A和/或B”各自打算意指“A单独、B单独或者A和B—起”。类似的解释也打算用于包括三个或更多个项目的列表。例如,短语“A、B和C中的至少一者”、“A、B和C中的一个或多个”和“A、B和/或C”各自打算意指“A单独、B单独、C单独、A和B—起、A和C一起、B和C一起或者A和B和C一起”。此外,上文和权利要求中对术语“基于”的使用打算意指“至少部分基于”,使得未记载的特征或元素也是可允许的。
[0085]本文描述的主题取决于期望的配置可在系统、装置、方法和/或物品中具体实现。前文描述中记载的实现方式不表示符合本文描述的主题的所有实现方式。反而,它们只是符合与描述的主题有关的方面的一些示例。虽然上文详细描述了几个变化,但其它修改或添加是可能的。具体地,除了本文记载的那些以外,也可提供另外的特征和/或变化。例如,上文描述的实现方式可针对公开的特征的各种组合和子组合和/或上文公开的若干进一步特征的组合和子组合。此外,附图中描绘的和/或本文描述的逻辑流程要实现期望的结果并非必然要求所示出的特定顺序或者先后顺序。其它实现方式可在权利要求的范围内。
【主权项】
1.一种由包括盘上存储和内存存储的组合的数据库系统实现的方法,该方法包括: 在至少包括被保存在盘上存储中的增量片段和主片段的多个片段中存储包括表格的多个数据记录,每个片段具有可见性数据结构以使能多版本并发控制; 利用字典压缩和η比特压缩来压缩每个片段; 如果为了读取操作或写入操作片段被访问并且片段不是已经在主系统存储器中,则将片段从盘上存储加载到所述主系统存储器中、加载在内存存储中;以及 在所述多个片段中的至少一个在所述主系统存储器中的同时,在提供快照隔离的同时在所述多个片段中的至少一个上并发地执行多个无锁读取和写入操作。2.如权利要求1所述的方法,其中,所述快照隔离是对于所述增量片段中的每个记录利用全系统时间戳来提供的。3.如权利要求2所述的方法,其中,所述快照隔离基于一致视图使得行在事务内可见,所述一致视图进而是基于所述事务开始时的当前系统时间戳的。4.如权利要求3所述的方法,其中,所述快照隔离在所述事务提交时生成新的系统时间戳,所述新的系统时间戳成为所述行的提交标识符(ID)。5.如权利要求4所述的方法,其中,对于每个片段的每个行,随着这种行被插入、更新和删除,维护多版本并发控制(MVCC)信息。6.如权利要求5所述的方法,其中,所述MVCC信息对于每一行至少包括创建时间戳和破坏时间戳两者。7.如权利要求6所述的方法,其中,对于超载,由开放事务所创建或破坏的行具有创建时间戳或破坏时间戳,所述创建时间戳或破坏时间戳进而包含对与创建或破坏了所述行的事务相对应的控制块的引用,而不是提交ID。8.如权利要求7所述的方法,其中,尝试读取片段中的行的事务通过以下方式对于具有从单行到整个表格不等的不同粒度水平的数据集合读取最优地确立每一行的可见性: 将所述事务的一致视图的基本时间戳与所述行的MVCC信息相比较;或者将所述事务的控制块与被MVCC信息内的创建或破坏时间戳所指代的被引用事务控制块相比较。9.如权利要求1所述的方法,还包括: 对于每个插入、更新和删除的语句生成日志记录;以及 基于生成的日志记录,对于重做、撤销、提交后和清除动作,对于具有从单行到整个表格不等的不同粒度的数据集合改变,最优地维护插入、更新和删除的行的多版本并发控制?目息O10.如权利要求1所述的方法,其中,存储在盘上存储中的表格包括表格模式元数据,所述表格模式元数据表征所述表格的模式并且使能在不访问系统目录的情况下执行重做、撤销、提交后和清除动作。11.如权利要求1所述的方法,还包括: 将表格数据、多版本并发控制(MVCC)信息和元数据存储在盘上存储中的页的链中。12.如权利要求1所述的方法,其中,增量片段的列片段的元素通过以下方式被加载到存储器中: 存储并直接加载列数据阵列和字典值阵列到存储器中;以及基于所述列数据阵列和所述字典值阵列重计算形成所述增量片段的一部分的其它成分。13.如权利要求1所述的方法,其中,所述多个无锁读取和写入操作形成OLAP和OLTP事务两者的一部分。14.如权利要求13所述的方法,其中,所述无锁读取和写入操作包括: 允许并发的读取操作和写入操作,使得它们不阻止彼此; 写入者利用表示数据对象的版本的版本化数据结构向特定数据对象的最新版本应用改变,并且在冲突的情况下重启改变操作;以及 读取器从这种数据对象的稳定的更旧版本并发地读取。15.如权利要求14所述的方法,其中,所述版本化数据结构用于内存存储中的数据,包括列值阵列、倒排索引、字典值阵列、字典索引、多版本并发控制(MVCC)信息和表格模式元数据。16.如权利要求1所述的方法,还包括: 执行内存存储中的现有增量片段和主片段的合并,所述合并包括: 在内存和在盘上都创建新的增量片段和新的主片段; 将一个或多个未提交的行从现有增量片段拷贝到新的增量片段; 将一个或多个提交的行从现有增量片段和现有主片段拷贝到新的主片段; 可选地对新的主片段重排序以允许数据记录的最大限度压缩的实现; 利用新的增量片段和新的主片段替换现有增量片段和现有主片段;以及 丢弃被替换的增量片段和主片段。17.如权利要求1所述的方法,还包括:发起包括以下各项中的至少一者的数据库管理操作:更改表格,对数据库重分区,从表格移动数据,或者从表格导出数据。18.如权利要求1所述的方法,其中,存储、压缩、加载和执行是由形成至少一个计算系统的一部分的至少一个硬件数据处理器实现的。19.一种非暂态计算机程序产品,存储供数据库系统使用的指令,该数据库系统包括处理器以及盘上存储和内存存储的组合,所述指令在被所述数据库系统执行时导致包括以下在内的操作: 在至少包括被保存在盘上存储中的增量片段和主片段的多个片段中存储包括表格的多个数据记录,每个片段具有可见性数据结构以使能多版本并发控制; 利用字典压缩和η比特压缩来压缩每个片段; 如果为了读取操作或写入操作片段被访问并且片段不是已经在主系统存储器中,则将片段从盘上存储加载到所述主系统存储器中、加载在内存存储中;以及 在所述多个片段中的至少一个在所述主系统存储器中的同时,在提供快照隔离的同时在所述多个片段中的至少一个上并发地执行多个无锁读取和写入操作。20.—种系统,包括: 至少一个硬件数据处理器; 盘上存储;以及 内存存储; 其中: 包括表格的多个数据记录被存储在至少包括被保存在盘上存储中的增量片段和主片段的多个片段中; 每个片段具有可见性数据结构以使能多版本并发控制; 每个片段被利用字典压缩和η比特压缩来压缩; 如果为了读取操作或写入操作片段被访问并且片段不是已经在主系统存储器中,则片段被从盘上存储加载到所述主系统存储器中、加载在内存存储中;并且 在所述多个片段中的至少一个在所述主系统存储器中的同时,在提供快照隔离的同时在所述多个片段中的至少一个上并发地执行多个无锁读取和写入操作。
【文档编号】G06F17/30GK105868228SQ201510813346
【公开日】2016年8月17日
【申请日】2015年11月20日
【发明人】A.K.戈尔, I.施雷特, J.李, M.安德雷, S.盖辛格, T.莱格勒
【申请人】Sap欧洲公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1