CN105630865A - 用于内存列式存储的n比特压缩版本化列数据阵列 - Google Patents
用于内存列式存储的n比特压缩版本化列数据阵列 Download PDFInfo
- Publication number
- CN105630865A CN105630865A CN201510813340.0A CN201510813340A CN105630865A CN 105630865 A CN105630865 A CN 105630865A CN 201510813340 A CN201510813340 A CN 201510813340A CN 105630865 A CN105630865 A CN 105630865A
- Authority
- CN
- China
- Prior art keywords
- standby array
- array
- writer
- standby
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
作为列式内存数据库的一部分,值标识符被插入到内存的后备阵列中,直到判定这种后备阵列不具有充分的容量的时候为止。然后生成新的后备阵列,其包括旧后备阵列中的值标识符并且具有充分的容量。旧后备阵列可在没有使用这种后备阵列的活跃操作时被从存储器中冲刷掉。这种布置允许了读取者和非结构性写入者并发地操作。也描述了有关的装置、系统、技术和物品。
Description
技术领域
本文描述的主题涉及支持对内存(in-memory)列式存储的并发读取者(reader)和写入者(writer)访问的n比特压缩版本化(versioned)列数据阵列(array)。
背景技术
对于一些列式内存数据存储,列值可被字典压缩。这种压缩使得列中的每个不同值被映射到唯一的整数值。此映射是一对一的。这些整数值有时被称为值ID或vid,作为值标识符的简写。关联到每个列的有这些vid的向量,其可被称为列数据阵列或索引向量。对于列c,c的索引向量的位置p中的vidv指示出对于列c,位置p处的行具有关联到v的值。为了存储效率,向量中的vid可被打包,使得只使用n比特来表示向量中的每个vid,其中n是表示最高vid所需要的比特的数目。例如,如果n等于2,则在索引向量的前64比特中,可存储列中的前32行的vid。
发明内容
在一个方面中,列式内存数据库的列中的每个不同的值被映射到不同的值标识符。然后,通过在索引向量的第一后备阵列中的每个位置p处插入与行n对于该列所具有的值相对应的值标识符来填充第一后备阵列。第一后备阵列具有预定义的分配存储器区块并且索引向量中的每个位置是逻辑上n比特宽的。判定第一后备阵列对于要插入其中的后续值标识符在预定义的分配存储器区块中不具有容量。随后,基于这样的判定,在不同的分配存储器区块中生成第二后备阵列,其包括第一组值标识符并且对于要插入其中的后续值标识符具有容量。接下来,后续值标识符被插入在第二后备阵列中。
将会明白,术语“第一后备阵列”和“第二后备阵列”就是指创建这种后备阵列的相对时间,并且在第一后备阵列之前和第二后备阵列之后都可以有创建的后备阵列。在一些情况下,术语“旧后备阵列”可以指第一后备阵列,并且术语“新后备阵列”可以指第二后备阵列。
该判定可基于对于后续值标识符没有空的行位置。该判定可基于后续值标识符具有超过n比特的宽度。
至少一个写入者和至少一个读取者可并发地访问索引向量。
在后续值标识符被插入到第二后备阵列中之后,第一后备阵列可被从存储器冲刷掉。当没有在第二后备阵列的建立之前注册的未完成读取者时,第一后备阵列可被冲刷。读取者可向(协调诸如冲刷存储器之类的活动的)垃圾收集器注册。
可以有向量索引的多个实例并且第二后备阵列可以是逐实例地生成的。
信号量(semaphore)可与每个索引向量相关联。信号量可被指派给寻求生成第二后备阵列的第一写入者。信号量可在将值标识符从第一后备阵列拷贝到第二后备阵列中之后被释放,并且第二后备阵列是作为索引向量的最新后备阵列建立的。
第二写入者可等待指派给第一写入者的信号量直到其被释放为止。第二写入者然后可在第二后备阵列上执行写入函子。
在给定的时间只可允许一个写入者执行对第一后备阵列的结构性改变。在给定时间被允许执行对第一后备阵列的结构性改变的写入者被提供对防止其他写入者执行结构性改变的排斥机制的拥有权。
在有两个或更多个写入者并发地寻求执行对第一后备阵列的结构性改变的情况下,没有排斥机制的一个或多个写入者在结构性改变对第二后备阵列做出之前等待对排斥机制的拥有权的释放和随后的提供。可以有至少一个写入者在另一写入者拥有排斥机制的同时并发地寻求执行对第一后备阵列的非结构性改变,并且在这种情况下,没有排斥机制的写入者可在非结构性改变对第二后备阵列做出之前等待排斥机制的释放。
写入者可查询排斥机制以获得对排斥机制的拥有权或者将该写入者置于休眠直到排斥机制对这种写入者可用为止。排斥机制可采取各种形式,例如包括信号量、互斥锁和自旋锁。
也描述了存储指令的非暂态计算机程序产品(即,物理上具体实现的计算机程序产品),这些指令在被一个或多个计算系统的一个或多个数据处理器执行时使得至少一个数据处理器执行这里的操作。类似地,也描述了计算机系统,这些计算机系统可包括一个或多个数据处理器和耦合到这一个或多个数据处理器的存储器。存储器可临时或永久地存储指令,这些指令使得至少一个处理器执行本文描述的操作中的一个或多个。此外,方法可由单个计算系统内的或者分布在两个或更多个计算系统间的一个或多个数据处理器实现。这种计算系统可被连接并且可经由一个或多个连接、经由多个计算系统中的一个或多个之间的直接连接等等来交换数据和/或命令或其它指令等等,所述一个或多个连接包括但不限于通过网络(例如,因特网、无线广域网、局域网、广域网、有线网络等等)的连接。
本文描述的主题提供了许多技术优点。例如,当前主题对于增量中的索引向量提供了(按存储器的)高效表示,并且对于性能,允许了写入者和读取者并发地访问增量索引向量。
本文描述的主题的一个或多个变化的细节在附图和下面的描述中记载。本文描述的主题的其它特征和优点将从描述和图以及从权利要求中显而易见。
附图说明
图1是图示出商业软件系统体系结构的特征的图;
图2是图示出商业软件系统体系结构的特征的另一幅图;
图3是主存储中存储的片段的示意性表示;
图4是图示出统一表格容器页链的特征的图;
图5是图示出统一表格增量的特征的图;
图6是图示出统一表格未排序字典的特征的图;
图7是图示出利用统一表格执行增量合并操作和读取操作的功能框图;
图8是图示出具有第一后备阵列和第二后备阵列的索引向量的图;
图9是图示出写入者对信号量的使用的过程流程图;
图10是图示出写入函子的执行的过程流程图;并且
图11是图示出使能对索引向量的并发读取者和写入者访问的技术的过程流程图。
各幅图中的同样的参考符号指示同样的元素。
具体实施方式
当前主题包括数个方面,这些方面可被单独应用或者将一个或多个这种方面组合应用,来支持一种统一数据库表格方案,该方案将内存数据库方案的性能优点与盘上数据库方案的降低的存储成本相集成。当前主题可在以下系统中实现:使用内存OLAP的数据库系统,例如包括大小为若干太字节(或更大)的数据库,具有数十亿(或更多)行的表格,等等;使用内存OLTP的系统(例如,企业资源规划或ERP系统等等),例如具有高事务量的大小为若干太字节(或更大)的数据库;以及使用盘上OLAP的系统(例如,“大数据”,用于高级分析的分析服务器、数据仓库、商业智能环境,等等),例如大小为若干拍字节或甚至更大的数据库、具有多达数万亿行的表格,等等。
当前主题可实现为企业资源规划(enterpriseresourceplanning,ERP)系统的核心软件平台、其它商业软件体系结构或者在特定组织的控制下的一个或多个处理器上运行的其它数据密集型计算应用或软件体系结构。这个布置对于如下的大规模组织可能是非常有效的:这些组织具有非常富有经验的内部信息技术(IT)职员,并且对于这些组织,在定制市售的商业软件解决方案以结合组织特定的业务过程和功能一起工作所需要的计算硬件和咨询服务上的相当大的资本投入是可行的。图1示出了符合这种实现方式的系统的图100。计算系统110可包括提供商业软件系统的一个或多个特征的一个或多个核心软件平台模块120。该计算系统也可聚合或以其它方式提供一网关,经由该网关,用户可访问由一个或多个外部软件组件130提供的功能。客户端机器140可经由直接连接、本地终端或者通过网络150(例如,局域网、广域网、无线网络、因特网,等等)访问该计算系统。
数据库管理代理160或其它相当的功能可访问数据库管理系统170,数据库管理系统170存储数据并提供对数据的访问(所述数据例如,业务场景、业务过程和一个或多个业务配置的定义,以及与业务场景、业务过程和一个或多个业务配置的定义有关的数据、元数据、主数据等等,和/或与业务场景或业务过程的特定实例相关的数据对象和/或业务对象的具体实例,等等)。数据库管理系统170可包括至少一个表格180,并且还包括符合本文描述的那些的并行化特征。
图2示出了图示可包括在符合当前主题的实现方式的数据库或数据库管理系统中的特征的体系结构200的框图。可被保存在多个数据卷204之间的表格数据存储202可包括以下各项中的一个或多个:增量存储206(例如,分页增量部分,其可以可选地是OLTP优化的并且可以可选地包括合并过程208)、索引存储212(例如,一个或多个分段索引)以及主存储210。主存储210可包括符合本文描述的特征的分成片段的主部分。
为了实现最佳可能压缩并且也为了支持非常大的数据表格,表格的主部分可被划分成一个或多个片段。图3示出了主存储210中存储的各种片段的示意性表示300。一个或多个主片段或片段330可用于数据库的每个表格或列。小的、易管理的表格可利用单个片段来表示。非常大的表格可被分割成两个或更多个表格分区335。每个表格分区进而可包括两个或更多个片段330。片段330可以是其所属的表格的水平切片。每个片段330可包括一个或多个列片段340。每个列片段340可具有符合本文描述的特征的其自己的字典和值ID阵列。
片段330可有利地充分大以获得由于片段的最优化压缩以及聚合和扫描的高内存性能而产生的最大性能。相反,这种片段可充分地小以将任何给定片段的最大列加载到存储器中并且在内存对该片段排序。片段也可充分地小以能够将两个或更多个部分为空的片段合并成更小数目的片段。作为这个方面的说明性而非限制性的示例,一片段可包含十亿行,其中每列最多有100GB的数据。其它片段大小也在当前主题的范围内。片段可以可选地包括页的链。在一些实现方式中,列也可包括页的链。列数据可例如利用字典和/或任何其它压缩方法来加以压缩。表格片段可被实体化在内存的连续地址空间中以获得最大性能。数据库的所有片段可被存储在盘上,并且对这些片段的访问可基于对查询的数据访问要求的分析来作出。
再次参考图2,体系结构200的其它部分可包括数据操纵语言(datamanipulationlanguage,DML)处理模块或类似功能214、一个或多个查询处理模块或类似功能216(例如包括多版本并发控制)、支持索引存储212的索引构建器220、查询语言引擎222(其可以例如是SQL引擎)、用于接收来自用户226的输入的复杂事件处理模块(例如,事件处理器、流处理模块,等等)224,等等。
图4示出了图示统一表格容器页链400的示例的框图。如上所述,每个片段可以可选地包括页的链。一般地,容器可被表示为页链。页链一般可被表征为以给定顺序链接的页的集合。本文使用的术语“页”指的是数据库中的存储的基本单位。页大小一般是在构建数据库时确立的并且通常不能被改变。代表性的页大小可以是2kB、4kB、8kB、16kB等等级别的。一旦构建了服务器,该值通常就不能被改变。不同类型的页可存储不同类型的数据库对象。例如,数据页可以为表格存储数据行或列。索引页可以为索引的一个或多个级别存储索引行。大对象(largeobject,LOB)页可以为文本和图像列、为Java行外列等等存储数据。
也如图4中所示,可对增量部分、主部分、字典、索引段(可选,在图2中没有示出)等等定义页链的子链,使得这些实体中的每一者的“整体”包含一个或多个页。在当前主题的一些实现方式中,增量部分可包括“热”增量片段402和“冷”增量片段404两者,这两者可分开存储。主部分也可被再分成主片段330。包含字典压缩列式数据410的页可以指为它们包含字典的页。个体表格部分可根据需要被加载到主存储器中。合并过程可与事务处理解除耦合,使得合并过程可在恢复时(例如在日志重放期间)执行。页链,例如图4中所示的示例,可由容器目录条目(containerdirectoryentry,CDE)412发起。
单个RowID空间可在页链中跨页使用。一般指代数据库中的逻辑行的RowID可用于指代数据库的内存部分中的逻辑行并且也指代数据库的盘上部分中的物理行。行索引通常指的是表格中的行的物理的基于0的索引。基于0的索引可用于对连续阵列中的行物理寻址,其中逻辑RowID表示行的逻辑顺序,而不是物理位置。在一些内存数据库系统中,用于数据记录位置的物理标识符可被称为UDIV或DocID。与逻辑RowID不同,UDIV或DocID(或者相当的参数)可指示行(例如数据记录)的物理位置,而RowID指示逻辑位置。为了允许表格的分区具有符合当前主题的实现方式的单个RowID和行索引空间,对于新插入的记录以及对于跨片段的更新记录的新版本,RowID可被指派单调递增的ID。换言之,例如,更新记录将改变其RowID,因为更新实际上是(具有RowID的)旧记录的删除和(具有新RowID的)新记录的插入。利用此方案,表格的增量存储可按RowID来排序,这可用于访问路径的最优化。分开的物理表格实体可按分区来存储,并且这些分开的物理表格实体可在查询级别被连接成逻辑表格。
当在列式合并操作期间执行最优化压缩以将增量存储中记录的改变添加到主存储时,表格中的行一般被重排序。换言之,合并操作之后的行通常不再是按其物理行ID排序的。因此,根据当前主题的一个或多个实现方式可使用稳定的行标识符。稳定行标识符可以可选地是逻辑RowID。对稳定的逻辑(而不是物理)RowID的使用可允许在预写式日志和事务撤销日志中的REDO/UNDO条目中寻址行。此外,以这种方式可促进跨合并稳定、而不会保持对数据库的旧主版本的引用的光标。为了使能这些特征,可存储内存逻辑RowID到物理行索引的映射和相反方向的映射。在当前主题的一些实现方式中,RowID列可被添加到每个表格。RowID列在当前主题的一些实现方式中也可服从压缩。
图5示出了符合当前主题的一个或多个实现方式的统一表格增量500的框图。在一些示例中,可使用“热”和“冷”增量方案,其中未压缩的数据被保存在“热”增量部分中,而字典压缩的数据被保存在“冷”增量部分中,其中在热部分和冷部分之间执行微型合并。这种增量部分可被认为是单个容器。如图5中所示,每个增量子链可具有其自己的暂态结构。换言之,对于每个增量可使用单独的结构。页向量502可保持到个体页504的页句柄并且可允许页504上的快速迭代(例如作为列或表格扫描的一部分)。到个体页504的页句柄可包括被保持在存储器中的钉等等。当在本文中使用时,术语“钉(pin)”指的是将特定数据页(其也可能已被存储在盘上)保持在存储器中。作为示例,如果页未被钉住,则其可被从存储器清除。钉住通常在被活跃访问的数据页上进行以避免与将页从盘读取到存储器中相关联的潜在性能劣化。
RowID索引506可充当搜索结构以允许基于RowID值的给定间隔来找到页504。搜索时间可以是logn级别的,其中n非常小。RowID索引可经由RowID值提供对数据的快速访问。为了优化,“新”页在RowID和行索引之间可具有1:1关联,使得简单数学(没有查找)操作成为可能。在当前主题的至少一些实现方式中,只有被合并过程重组织的页需要RowID索引。
图6示出了统一表格未排序字典600的框图。根据当前主题的一个或多个实现方式,增量部分中的列数据可使用未排序字典。对每个增量列字典可提供暂态结构。页向量502可处理页在存储器中的钉住。从其它结构经由指针可提供直接访问。值向量间接602可允许每个字典块604相同数目的值。此能力对于按ValueID查找值可支持1级别的性能成本。字典可向每个唯一值指派唯一的ValueID(通常是数值),使得唯一值(其通常在存储器大小上大于ValueID)可被存储一次而不是多次。值阵列是被字典用来在给定ValueID的情况下检索值或者在给定值的情况下检索ValueID的结构。此技术可减小在值不唯一的情况下存储一组值所需要的存储器量,其通常被称为字典压缩。值到ValueID映射606对于按值查找ValueID可支持1级别的或者logn级别的散列或B树大小。B树是一种使数据保持被排序并允许对数时间的搜索、顺序访问、插入和删除的树数据结构。此能力对于字典压缩可能是必要的。B树对于范围扫描可能更好,但维护起来可能更昂贵。
图7示出了用于在统一表格上执行增量合并操作710的功能框图700。新的事务或改变可最初被写入到增量存储206中。主存储210可包括一个活跃片段712和一个或多个关闭片段716。当更新被从增量存储206合并到主存储210中时,关闭片段716中的现有记录不能被改变。反而,记录的新版本可被添加到活跃片段712,并且旧版本可被标记为无效。
功能框图700也图示了读取操作720。一般地,读取操作可具有对所有片段(即,活跃片段712和关闭片段716)的访问。可通过仅加载包含来自特定查询的数据的片段来优化读取操作。不包含这种数据的片段可被排除。为了做出此决定,可对每个片段存储容器级元数据(例如,最小值和/或最大值)。可将此元数据与查询相比较来判定片段是否包含请求的数据。
参考图8的图800,索引向量810可包括后备阵列(backingarray)820。后备阵列820是存储器的其中维护着vid的区块。后备阵列820在一些情况下可以是固定存储器的。当后备阵列820(有时被称为第一后备阵列)变满时,分配更大大小的新的后备阵列830(有时被称为第二后备阵列)并且旧的后备阵列820被新的所替换。例如,可在以下情况发生时分配新的后备阵列830:(i)要为超出当前后备阵列820的容量的行位置插入vid,或者(ii)要插入超出当前用于将vid编码到后备阵列820中的n比特编码的vid。
可对每个索引向量实例改变决定新后备阵列830的大小的试探。当前,新后备阵列830可被配置为始终具有比其所替换的那个更大的容量(因为增量存储是仅限插入的并且其只是被附加到),并且关于新后备阵列830有多大的决定可基于后备阵列820的当前大小以及将在新后备阵列830中使用的n比特编码。
因为在正在建立新后备阵列830时可能有并发的读取者和写入者访问索引向量810,所以需要防止这种读取者和写入者访问已被取消分配的旧后备阵列820(因为这将导致数据损坏或崩溃)。
为了允许并发的写入者和读取者,数据库170可利用版本化数据结构。数据库170可使用垃圾收集器(garbagecollector,GC)机制,其控制对诸如索引向量810这样的版本化数据结构的访问和改变。GC可保持对其所负责的任何版本化数据结构做出的修改的数目的计数器(无论版本化数据结构的数目如何都只有一个数字;每个表格可以有一个GC)。GC只需要知道结构性改变。在索引向量的情况下,唯一的结构性改变是新后备阵列的建立。当不需要建立新后备阵列830时插入新vid不被认为是结构性改变。因此,做出结构性改变的写入者有必要通知GC。GC控制的任何版本化数据结构中的每个结构性改变使得修改计数器递增1。通知结构性改变的实际机制在于将正被替换的旧后备阵列820物理地给予GC。GC随后递增修改计数器并且其将仅在其确信没有读取者可潜在地访问旧后备阵列820时才毁坏旧后备阵列820。
在读取者访问索引向量810之前,他们可从GC获得句柄。GC保持跟踪每个读取者获得其句柄时修改计数器的值。当读取者完成访问索引向量810时,他们毁坏由GC提供的句柄。对读取者句柄的这个破坏触发了GC进行的检查,该检查决定是否没有更多的具有如下句柄的读取者:这些句柄是在小于或等于正被毁坏的读取者句柄的修改计数器处获得的。如果情况是这样,则GC可毁坏在其修改计数器小于或等于正被毁坏的读取者句柄创建时的计数器时提供给GC供破坏的所有后备阵列。
对于读取者和写入者都不保证他们将访问最新近的后备阵列820。对于读取者,这通常不是问题。原因在于在数据库中这些读取访问与正被执行的事务(例如表格上的选择)有关。在读取开始之后插入的行不管怎样对于读取者事务都应当是不可见的。另一方面,读取者可看到在其开始其读取之后插入到索引向量中的数据。在此情况下,有上层中的MVCC(多版本并发控制)机制从查询的结果中过滤掉该事务不应当看到的行的任何vid。
写入者不访问最新后备阵列820的问题是重要的,因为不应当丢失任何写入。为了应对此问题,可按能够被重复调用的函数单位来对所有写入动作编码。这些函数单位在本文中被称为“写入函子”。
当写入产生结构性改变时,可采取以下步骤。参考图9的图900,首先,在910,被称为信号量的同步对象可被关联到每个索引向量810。在结构性改变上,需要建立新后备阵列830的写入者取得此信号量。在给定的时间,最多一个写入者可具有信号量。如果其不能获得信号量,则写入者等待。可以假定写入者可立即获得信号量。
第二,在920,写入者可分配新后备阵列830并且用来自旧后备阵列820的内容来填充它。从旧后备阵列820对内容的这个拷贝可意味着如果新后备阵列830将使用更大的n比特编码则对vid重编码。注意不需要建立新后备阵列830的其他写入者可仍在旧后备阵列820上操作并且他们可在这个结构性写入者在拷贝到新后备阵列820中时已经处理过的位置处插入。必须保证这些写入不丢失。
接下来,在930,写入者可以用新后备阵列830替换旧后备阵列820并且将旧后备阵列820给予GC。
写入者随后可在940释放其先前获得的信号量。等待信号量的写入者随后可被唤醒。写入者随后可在950执行(即,调用等等)其写入函子。
不需要建立新后备阵列830的写入者只是执行其写入函子。对写入函子本身的执行如下(并且如图10的图1000中所图示的)。
首先,在1010,可执行当前后备阵列820上的写入操作。然后,在1020,等待可产生结构性改变(即,建立新后备阵列830)的任何写入者的信号量。
接下来,在1030,可唤醒任何等待的写入者。此处的唤醒指的是通知写入者信号量已被释放,无论这种写入者是在寻求只执行函子还是在寻求产生结构性改变(并从而需要信号量)。然后,在1040,写入者检查当前后备阵列;如果该后备阵列匹配写入者作用于的旧后备阵列,则写入于是被认为完成了。如果有结构性改变,则该过程再次开始于新的(即,当前的等等)后备阵列830上的写入操作的执行(以保证写入者在索引向量810中的插入不丢失)。
如果产生结构性改变的第一写入者不能立即获得信号量而是必须等待它,则可以检查另一写入者在这样的时间段期间(即,当写入者正等待信号量时)是否建立了具有足够的容量和恰当的n比特编码的新后备阵列830——并且因此对于第一写入者不需要另外的后备阵列。在这种情况下,第一写入者于是将利用建立的新后备阵列830执行其函子。
将会明白,信号量只是一个示例,并且可以使用其它类型的排斥机制,例如互斥锁(锁定)和自旋锁。例如,排斥机制可确保在给定时间只有一个写入者在对后备阵列执行结构性改变。另外,排斥机制可被实现来允许有兴趣对后备阵列做出结构性改变的其他写入者等待拥有排斥机制的结构性写入者。一旦拥有排斥机制的结构性写入者释放该机制,则只有一个等待的结构性写入者可取得对该机制的拥有权。其他结构性写入者可保持等待直到其获得对排斥机制的拥有权为止。此外,写入者可查询该机制以获得对排斥机制的拥有权(如果其可用的话)或者被置于休眠直到排斥机制变得对这种写入者可用为止(例如,在排斥机制被做出结构性改变的写入者释放之后,等等)。此外,排斥机制可允许非结构性写入者等待排斥机制,等拥有该机制的结构性写入者释放它。应当注意非结构性写入者不取得对该机制的拥有权,一旦结构性写入者释放排斥机制他们就不再等待。
可提供各种类型的写入函子。例如,在索引向量810中的给定位置处插入一个vid的函子,对于索引向量810中的若干个连续位置插入同一vid的函子,以及接收vid的阵列和起始位置的函子,该函子利用来自此vid阵列的内容填充该给定阵列中的vid那么多的位置。
可提供各种类型的读取访问。例如,检索给定位置处的索引向量810的内容,填充位图以使得对包含给定vid的那些位置设置比特,以及与前一个一样,但索引向量中的位置可包含来自提供的若干个vid的一个。
还要注意以下事实,即,当建立新后备阵列830时,拖尾(trailing)位置(即,没有用来自先前后备阵列820的vid填充的位置)可以用可表示NULL(“没有值”)的0来初始化。当插入行时,可从写入操作中跳过对其提供NULL的列,因为这些索引向量810的位置将已经被填充了与NULL值相对应的vid。
通过在编码中使用0比特可提供最优化表示——这将指示出只具有NULL的列。这里的关键在于只要索引向量只具有0vid就永不创建后备阵列820。可利用以下语义来支持0比特编码。任何数目的0vid可被插入到向量中,而不引起实体化(即,不产生新后备阵列等等)。首先,插入的不同于0的值可触发后备阵列820的实体化。实体化的后备阵列820可具有足够的容量来保持以下两者中的最大值那么多的vid:(i)在实体化后备阵列820之前插入了0vid的最高位置,和(ii)触发了实体化的vid的位置。
图11是过程流程图1100,其中,在1110,(列式内存数据库的)列中的每个不同值被映射到不同的值标识符。在1120,通过在每个位置n处插入与位置p处的行对于该列具有的值相对应的值标识符来填充索引向量的第一后备阵列。此处的行位置指的是行在增量存储206中的位置。对于每个表格,增量中的行可由其在表格的增量部分中的位置(即,RowID)来指代(referredto)。第一后备阵列具有预定义的分配存储器区块并且索引向量中的每个位置在逻辑上是n比特宽的。然后,在1130,判定第一后备阵列对于要插入其中的后续值标识符在预定义的分配存储器区块中不具有容量。作为响应,在1140,在不同的分配存储器区块中生成第二后备阵列,其包括第一组值标识符并且对于要插入其中的后续值标识符具有容量。接下来,在1150,后续值标识符被插入到第二后备阵列中。
本文描述的主题的一个或多个方面或特征可在数字电子电路、集成电路、特殊设计的专用集成电路(applicationspecificintegratedcircuit,ASIC)、现场可编程门阵列(fieldprogrammablegatearray,FPGA)、计算机硬件、固件、软件和/或其组合中实现。这些各种方面或特征可包括在可编程系统上可执行和/或可解释的一个或多个计算机程序中的实现方式,该系统包括至少一个可编程处理器,该处理器可以是专用或通用的,其被耦合来从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令并且向它们发送数据和指令。可编程系统或计算系统可包括客户端和服务器。客户端和服务器一般可彼此远离并且通常通过通信网络来交互。客户端和服务器的关系是由于计算机程序在相应计算机上运行且相互之间具有客户端-服务器关系而发生的。
这些计算机程序——也可称为程序、软件、软件应用、应用、组件或代码——包括用于可编程处理器的机器指令,并且可以用高级别过程语言、面向对象的编程语言、功能性编程语言、逻辑编程语言和/或用汇编/机器语言来实现。当在本文中使用时,术语“机器可读介质”指的是用于向可编程处理器提供机器指令和/或数据的任何计算机程序产品、装置和/或设备,诸如例如磁盘、光盘、存储器和可编程逻辑器件(ProgrammableLogicDevice,PLD),包括以机器可读信号的形式接收机器指令的机器可读介质。术语“机器可读信号”指的是用于向可编程处理器提供机器指令和/或数据的任何信号。机器可读介质可非暂时地存储这种机器指令,诸如例如像非暂态固态存储器或磁性硬盘驱动器或者任何等同的存储介质那样。机器可读介质可以替换地或额外地以暂态方式存储这种机器指令,诸如例如像与一个或多个物理处理器核心相关联的处理器缓存或其它随机访问存储器那样。
为了支持与用户的交互,本文描述的主题的一个或多个方面或特征可在具有诸如例如阴极射线管(cathoderaytube,CRT)或液晶显示器(liquidcrystaldisplay,LCD)或发光二极管(lightemittingdiode,LED)监视器之类的用于向用户显示信息的显示设备以及用户可用来向计算机提供输入的键盘和诸如例如鼠标或轨迹球之类的指点设备的计算机上实现。其它种类的设备也可用于支持与用户的交互。例如,向用户提供的反馈可以是任何形式的感官反馈,诸如例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括但不限于音响、话音或触觉输入。其它可能的输入设备包括——但不限于——触摸屏或其它触摸敏感设备,例如单点或多点电阻或电容触控板、语音识别硬件和软件、光学扫描仪、光学指示器、数字图像捕捉设备和关联的解释软件,等等。
在以上描述中和权利要求中,诸如“……中的至少一者”或者“……中的一个或多个”之类的短语可在后跟元素或特征的连接列表的情况下出现。术语“和/或”也可出现在两个或更多个元素或特征的列表中。除非与其所用于的上下文隐含地或明确地矛盾,否则这种短语打算意指任何列出的元素或特征单独地或者任何记载的元素或特征与任何其它记载的元素或特征相结合地。例如,短语“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一起”。此外,上文和权利要求中对术语“基于”的使用打算意指“至少部分基于”,使得未记载的特征或元素也是可允许的。
本文描述的主题取决于期望的配置可在系统、装置、方法和/或物品中具体实现。前文描述中记载的实现方式不表示符合本文描述的主题的所有实现方式。反而,它们只是符合与描述的主题有关的方面的一些示例。虽然上文详细描述了几个变化,但其它修改或添加是可能的。具体地,除了本文记载的那些以外,也可提供另外的特征和/或变化。例如,上文描述的实现方式可针对公开的特征的各种组合和子组合和/或上文公开的若干进一步特征的组合和子组合。此外,附图中描绘的和/或本文描述的逻辑流程要实现期望的结果并非必然要求所示出的特定顺序或者先后顺序。其它实现方式可在权利要求的范围内。
Claims (20)
1.一种方法,包括:
在内存数据库中将列中的每个不同值映射到不同的值标识符;
通过在索引向量的第一后备阵列中的每个位置p处插入与行n对于所述列所具有的值相对应的值标识符来填充所述第一后备阵列,所述第一后备阵列具有预定义的分配存储器区块,所述索引向量中的每个位置是逻辑上n比特宽的;
判定所述第一后备阵列对于要插入其中的后续值标识符在所述预定义的分配存储器区块中不具有容量;
基于所述判定,在不同的分配存储器区块中生成第二后备阵列,所述第二后备阵列包括第一组值标识符并且对于要插入其中的后续值标识符具有容量;以及
将所述后续值标识符插入在所述第二后备阵列中。
2.如权利要求1所述的方法,其中,所述判定是基于对于所述后续值标识符没有空行位置的。
3.如权利要求1所述的方法,其中,所述判定是基于所述后续值标识符具有超过n比特的宽度的。
4.如权利要求1所述的方法,其中,至少一个写入者和至少一个读取者要并发访问所述索引向量。
5.如权利要求1所述的方法,还包括:
在所述后续值标识符被插入到所述第二后备阵列中之后将所述第一后备阵列从存储器冲刷掉。
6.如权利要求5所述的方法,其中,当没有在所述第二后备阵列的建立之前注册的未完成读取者时,所述第一后备阵列被冲刷。
7.如权利要求6所述的方法,其中,所述读取者向垃圾收集器注册。
8.如权利要求1所述的方法,其中,所述数据库是列式内存数据库。
9.如权利要求1所述的方法,其中,有向量索引的多个实例并且所述第二后备阵列是逐实例地生成的。
10.如权利要求1所述的方法,还包括:
将信号量与每个索引向量相关联;以及
将所述信号量指派给寻求生成所述第二后备阵列的第一写入者。
11.如权利要求10所述的方法,还包括:
在将所述值标识符从所述第一后备阵列拷贝到所述第二后备阵列中之后释放所述信号量。
12.如权利要求10所述的方法,还包括:
第二写入者等待指派给所述第一写入者的信号量被释放;
所述第二写入者获得所述信号量;以及
所述第二写入者在所述第二后备阵列上执行写入函子。
13.如权利要求1所述的方法,其中,在给定时间只允许一个写入者对所述第一后备阵列执行结构性改变。
14.如权利要求13所述的方法,其中,在给定时间被允许对所述第一后备阵列执行结构性改变的写入者被提供对防止其他写入者执行结构性改变的排斥机制的拥有权。
15.如权利要求14所述的方法,其中,有两个或更多个写入者并发地寻求执行对所述第一后备阵列的结构性改变,并且没有排斥机制的一个或多个写入者在结构性改变对所述第二后备阵列做出之前等待对所述排斥机制的拥有权的释放和随后的提供。
16.如权利要求15所述的方法,其中,有至少一个写入者在另一写入者拥有所述排斥机制的同时并发地寻求执行对所述第一后备阵列的非结构性改变,并且没有所述排斥机制的写入者在非结构性改变对所述第二后备阵列做出之前等待所述排斥机制的释放。
17.如权利要求14所述的方法,还包括:写入者查询所述排斥机制以获得对所述排斥机制的拥有权或者将该写入者置于休眠直到所述排斥机制对这种写入者可用为止。
18.如权利要求14所述的方法,其中,所述排斥机制是从由以下各项构成的组中选择的:信号量、互斥锁、自旋锁。
19.一种存储指令的非暂态计算机程序产品,所述指令当被形成至少一个计算系统的一部分的至少一个数据处理器执行时导致包括以下在内的操作:
在列式内存数据库中将列中的每个不同值映射到不同的值标识符;
通过在索引向量的第一后备阵列中的每个位置p处插入与行n对于所述列所具有的值相对应的值标识符来填充所述第一后备阵列,所述第一后备阵列具有预定义的分配存储器区块;
判定所述第一后备阵列对于要插入其中的后续值标识符在所述预定义的分配存储器区块中不具有容量;
基于所述判定,在不同的分配存储器区块中生成第二后备阵列,所述第二后备阵列包括第一组值标识符并且对于要插入其中的后续值标识符具有容量;以及
将所述后续值标识符插入在所述第二后备阵列中。
20.一种系统,包括:
至少一个数据处理器;以及
存储指令的存储器,所述指令当被所述至少一个数据处理器执行时导致包括以下在内的操作:
在列式内存数据库中将列中的每个不同值映射到不同的值标识符;
通过在索引向量的第一后备阵列中的每个位置p处插入与行n对于所述列所具有的值相对应的值标识符来填充所述第一后备阵列,所述第一后备阵列具有预定义的分配存储器区块;
判定所述第一后备阵列对于要插入其中的后续值标识符在所述预定义的分配存储器区块中不具有容量;
基于所述判定,在不同的分配存储器区块中生成第二后备阵列,所述第二后备阵列包括第一组值标识符并且对于要插入其中的后续值标识符具有容量;以及
将所述后续值标识符插入在所述第二后备阵列中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/553,435 US10042552B2 (en) | 2014-11-25 | 2014-11-25 | N-bit compressed versioned column data array for in-memory columnar stores |
US14/553,435 | 2014-11-25 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105630865A true CN105630865A (zh) | 2016-06-01 |
CN105630865B CN105630865B (zh) | 2020-09-08 |
Family
ID=54478536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510813340.0A Active CN105630865B (zh) | 2014-11-25 | 2015-11-20 | 用于内存列式存储的n比特压缩版本化列数据阵列 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10042552B2 (zh) |
EP (1) | EP3026578B1 (zh) |
CN (1) | CN105630865B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291041A (zh) * | 2018-12-10 | 2020-06-16 | Sap欧洲公司 | 列数据的非统一分页 |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9824134B2 (en) | 2014-11-25 | 2017-11-21 | Sap Se | Database system with transaction control block index |
US9965504B2 (en) | 2014-11-25 | 2018-05-08 | Sap Se | Transient and persistent representation of a unified table metadata graph |
US9513811B2 (en) | 2014-11-25 | 2016-12-06 | Sap Se | Materializing data from an in-memory array to an on-disk page structure |
US9891831B2 (en) | 2014-11-25 | 2018-02-13 | Sap Se | Dual data storage using an in-memory array and an on-disk page structure |
US9898551B2 (en) | 2014-11-25 | 2018-02-20 | Sap Se | Fast row to page lookup of data table using capacity index |
US10474648B2 (en) | 2014-11-25 | 2019-11-12 | Sap Se | Migration of unified table metadata graph nodes |
US10296611B2 (en) | 2014-11-25 | 2019-05-21 | David Wein | Optimized rollover processes to accommodate a change in value identifier bit size and related system reload processes |
US10558495B2 (en) | 2014-11-25 | 2020-02-11 | Sap Se | Variable sized database dictionary block encoding |
US10255309B2 (en) | 2014-11-25 | 2019-04-09 | Sap Se | Versioned insert only hash table for in-memory columnar stores |
US10127260B2 (en) | 2014-11-25 | 2018-11-13 | Sap Se | In-memory database system providing lockless read and write operations for OLAP and OLTP transactions |
US9798759B2 (en) | 2014-11-25 | 2017-10-24 | Sap Se | Delegation of database post-commit processing |
US10725987B2 (en) | 2014-11-25 | 2020-07-28 | Sap Se | Forced ordering of a dictionary storing row identifier values |
US9792318B2 (en) | 2014-11-25 | 2017-10-17 | Sap Se | Supporting cursor snapshot semantics |
US10042552B2 (en) | 2014-11-25 | 2018-08-07 | Sap Se | N-bit compressed versioned column data array for in-memory columnar stores |
US9875024B2 (en) | 2014-11-25 | 2018-01-23 | Sap Se | Efficient block-level space allocation for multi-version concurrency control data |
US9779104B2 (en) | 2014-11-25 | 2017-10-03 | Sap Se | Efficient database undo / redo logging |
US10552402B2 (en) | 2014-11-25 | 2020-02-04 | Amarnadh Sai Eluri | Database lockless index for accessing multi-version concurrency control data |
US10503445B2 (en) * | 2015-03-23 | 2019-12-10 | Netapp, Inc. | Data structure store and data management |
US10558704B2 (en) * | 2017-07-20 | 2020-02-11 | Sap Se | Smart rollover |
US11163781B2 (en) * | 2019-01-14 | 2021-11-02 | Sap Se | Extended storage of text analysis source tables |
US11347705B2 (en) | 2019-04-02 | 2022-05-31 | Sap Se | Supporting scalable distributed secondary index using replication engine for high-performance distributed database systems |
US11238106B2 (en) * | 2019-05-17 | 2022-02-01 | Sap Se | Fingerprints for compressed columnar data search |
CN111107022B (zh) * | 2019-12-20 | 2021-08-27 | 深圳前海微众银行股份有限公司 | 数据传输优化方法、设备及可读存储介质 |
US11245415B2 (en) * | 2020-03-13 | 2022-02-08 | The University Of British Columbia University-Industry Liaison Office | Dynamic clustering-based data compression |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311930A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 具有重复值的表的块压缩 |
EP2660732A1 (en) * | 2012-04-30 | 2013-11-06 | Sap Ag | Unified table query processing |
Family Cites Families (127)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5222235A (en) | 1990-02-01 | 1993-06-22 | Bmc Software, Inc. | Databases system for permitting concurrent indexing and reloading of data by early simulating the reload process to determine final locations of the data |
US5701480A (en) | 1991-10-17 | 1997-12-23 | Digital Equipment Corporation | Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing |
US5794229A (en) | 1993-04-16 | 1998-08-11 | Sybase, Inc. | Database system with methodology for storing a database table by vertically partitioning all columns of the table |
US5594898A (en) | 1994-03-25 | 1997-01-14 | Microsoft Corporation | Method and system for joining database tables using compact row mapping structures |
US5758145A (en) | 1995-02-24 | 1998-05-26 | International Business Machines Corporation | Method and apparatus for generating dynamic and hybrid sparse indices for workfiles used in SQL queries |
US5717919A (en) | 1995-10-02 | 1998-02-10 | Sybase, Inc. | Database system with methods for appending data records by partitioning an object into multiple page chains |
JP3083742B2 (ja) | 1995-10-03 | 2000-09-04 | インターナショナル・ビジネス・マシーンズ・コーポレ−ション | 表計算方法 |
US5870758A (en) | 1996-03-11 | 1999-02-09 | Oracle Corporation | Method and apparatus for providing isolation levels in a database system |
US6604117B2 (en) | 1996-03-19 | 2003-08-05 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
US6070165A (en) | 1997-12-24 | 2000-05-30 | Whitmore; Thomas John | Method for managing and accessing relational data in a relational cache |
JP3563257B2 (ja) | 1998-02-20 | 2004-09-08 | Necエレクトロニクス株式会社 | Atmスイッチ回路 |
US6275830B1 (en) | 1998-03-18 | 2001-08-14 | Oracle Corporation | Compile time variable size paging of constant pools |
US20020107837A1 (en) | 1998-03-31 | 2002-08-08 | Brian Osborne | Method and apparatus for logically reconstructing incomplete records in a database using a transaction log |
US6490670B1 (en) | 1998-04-24 | 2002-12-03 | International Business Machines Corporation | Method and apparatus for efficiently allocating objects in object oriented systems |
US6606617B1 (en) | 1998-09-24 | 2003-08-12 | International Business Machines Corporation | Optimized technique for prefetching LOB table space pages |
US6460051B1 (en) | 1998-10-28 | 2002-10-01 | Starfish Software, Inc. | System and methods for synchronizing datasets in a communication environment having high-latency or other adverse characteristics |
US6282605B1 (en) | 1999-04-26 | 2001-08-28 | Moore Computer Consultants, Inc. | File system for non-volatile computer memory |
CA2281287C (en) | 1999-09-01 | 2003-03-11 | Ibm Canada Limited-Ibm Canada Limitee | Method and system for efficiently searching for free space in a table of a relational database having a clustering index |
GB9924523D0 (en) | 1999-10-15 | 1999-12-15 | Univ Strathclyde | Database processor |
US6598041B1 (en) | 2000-09-07 | 2003-07-22 | International Business Machines Corporation | Method, system, and program for processing modifications to data in tables in a database system |
US6865577B1 (en) | 2000-11-06 | 2005-03-08 | At&T Corp. | Method and system for efficiently retrieving information from a database |
US7054858B2 (en) | 2001-08-01 | 2006-05-30 | Oic Acquisition Corporation | System and method for retrieval of objects from object to relational mappings |
GB2379526A (en) | 2001-09-10 | 2003-03-12 | Simon Alan Spacey | A method and apparatus for indexing and searching data |
US8738568B2 (en) | 2011-05-05 | 2014-05-27 | Oracle International Corporation | User-defined parallelization in transactional replication of in-memory database |
US8868544B2 (en) | 2002-04-26 | 2014-10-21 | Oracle International Corporation | Using relational structures to create and support a cube within a relational database system |
US6898608B2 (en) | 2002-04-26 | 2005-05-24 | Oracle International Corporation | Techniques for managing what-if analysis of data managed by a relational database system |
JP4214712B2 (ja) | 2002-05-16 | 2009-01-28 | 株式会社日立製作所 | データベースのページ確保処理方法 |
US7305386B2 (en) | 2002-09-13 | 2007-12-04 | Netezza Corporation | Controlling visibility in multi-version database systems |
US6981004B2 (en) | 2002-09-16 | 2005-12-27 | Oracle International Corporation | Method and mechanism for implementing in-memory transaction logging records |
US6804729B2 (en) | 2002-09-30 | 2004-10-12 | International Business Machines Corporation | Migrating a memory page by modifying a page migration state of a state machine associated with a DMA mapper based on a state notification from an operating system kernel |
US20050027692A1 (en) | 2003-07-29 | 2005-02-03 | International Business Machines Corporation. | Method, system, and program for accessing data in a database table |
US7107396B2 (en) | 2003-10-31 | 2006-09-12 | International Business Machines Corporation | Chaining of blocks for optimal performance with DASD (Direct Access Storage Devices) free nonvolatile updates |
US20050234986A1 (en) | 2004-04-09 | 2005-10-20 | Microsoft Corporation | Systems and methods for fragment-based serialization |
US7376674B2 (en) | 2004-05-14 | 2008-05-20 | Oracle International Corporation | Storage of multiple pre-modification short duration copies of database information in short term memory |
US7451146B2 (en) | 2004-06-30 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Almost non-blocking linked stack implementation |
US9208191B2 (en) | 2012-07-20 | 2015-12-08 | Sap Se | Lock-free, scalable read access to shared data structures |
US7302533B2 (en) | 2005-03-11 | 2007-11-27 | International Business Machines Corporation | System and method for optimally configuring software systems for a NUMA platform |
US7698712B2 (en) | 2005-07-21 | 2010-04-13 | Sap Ag | Selectively transmitting transaction data |
US7822932B2 (en) | 2006-08-18 | 2010-10-26 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
TWI417722B (zh) | 2007-01-26 | 2013-12-01 | Hicamp Systems Inc | 階層式不可改變的內容可定址的記憶體處理器 |
KR20080090934A (ko) | 2007-04-06 | 2008-10-09 | 삼성전자주식회사 | 정속 역 재생 방법 및 장치 |
US8364648B1 (en) | 2007-04-09 | 2013-01-29 | Quest Software, Inc. | Recovering a database to any point-in-time in the past with guaranteed data consistency |
US8024296B1 (en) | 2007-06-15 | 2011-09-20 | Symantec Corporation | Method and apparatus for agent-less auditing of server |
US9141435B2 (en) | 2007-07-30 | 2015-09-22 | Sybase, Inc. | System and methodology providing workload management in database cluster |
US8661204B2 (en) | 2007-08-15 | 2014-02-25 | University Of Rochester, Office Of Technology Transfer | Mechanism to support flexible decoupled transactional memory |
US7966343B2 (en) | 2008-04-07 | 2011-06-21 | Teradata Us, Inc. | Accessing data in a column store database based on hardware compatible data structures |
US20090064160A1 (en) | 2007-08-31 | 2009-03-05 | Microsoft Corporation | Transparent lazy maintenance of indexes and materialized views |
US8127233B2 (en) | 2007-09-24 | 2012-02-28 | Microsoft Corporation | Remote user interface updates using difference and motion encoding |
US7836037B2 (en) | 2007-10-04 | 2010-11-16 | Sap Ag | Selection of rows and values from indexes with updates |
US20100241812A1 (en) | 2007-10-18 | 2010-09-23 | Nxp B.V. | Data processing system with a plurality of processors, cache circuits and a shared memory |
US20090287737A1 (en) | 2007-10-31 | 2009-11-19 | Wayne Hammerly | Architecture for enabling rapid database and application development |
US7761434B2 (en) | 2007-11-19 | 2010-07-20 | Red Hat, Inc. | Multiversion concurrency control in in-memory tree-based data structures |
US20130091162A1 (en) | 2008-07-25 | 2013-04-11 | Jerzy Jozef Lewak | Data Access Using Multilevel Selectors and Contextual Assistance |
US8255398B2 (en) | 2008-09-30 | 2012-08-28 | International Business Machines Corporation | Compression of sorted value indexes using common prefixes |
US20100088309A1 (en) | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale joining for querying of column based data encoded structures |
US8732139B2 (en) | 2008-12-18 | 2014-05-20 | Sap Ag | Method and system for dynamically partitioning very large database indices on write-once tables |
US8140495B2 (en) | 2009-05-04 | 2012-03-20 | Microsoft Corporation | Asynchronous database index maintenance |
US8161001B2 (en) | 2009-05-07 | 2012-04-17 | Bmc Software, Inc. | Relational database page-level schema transformations |
US8205062B2 (en) | 2009-10-14 | 2012-06-19 | Inetco Systems Limited | Tiered data management method and system for high performance data monitoring |
US9262330B2 (en) | 2009-11-04 | 2016-02-16 | Microsoft Technology Licensing, Llc | Column oriented in-memory page caching |
US8443375B2 (en) | 2009-12-14 | 2013-05-14 | Verisign, Inc. | Lockless queues |
US8356007B2 (en) | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
US8396831B2 (en) | 2009-12-18 | 2013-03-12 | Microsoft Corporation | Optimistic serializable snapshot isolation |
MY155432A (en) | 2010-03-18 | 2015-10-15 | Nuodb Inc | Database management system |
US9251214B2 (en) | 2010-04-08 | 2016-02-02 | Microsoft Technology Licensing, Llc | In-memory database system |
US8849773B2 (en) | 2010-04-28 | 2014-09-30 | Dell Products L.P. | Methods and apparatus for active optimization of data |
US20110276744A1 (en) | 2010-05-05 | 2011-11-10 | Microsoft Corporation | Flash memory cache including for use with persistent key-value store |
US20110302143A1 (en) | 2010-06-02 | 2011-12-08 | Microsoft Corporation | Multi-version concurrency with ordered timestamps |
US10803066B2 (en) | 2010-06-29 | 2020-10-13 | Teradata Us, Inc. | Methods and systems for hardware acceleration of database operations and queries for a versioned database based on multiple hardware accelerators |
US8412689B2 (en) | 2010-07-07 | 2013-04-02 | Microsoft Corporation | Shared log-structured multi-version transactional datastore with metadata to enable melding trees |
US8510344B1 (en) | 2010-08-27 | 2013-08-13 | Amazon Technologies, Inc. | Optimistically consistent arbitrary data blob transactions |
US8601038B2 (en) | 2010-10-08 | 2013-12-03 | Hasso-Plattner-Institut Fur Softwaresystemtechnik Gmbh | Available-to-promise on an in-memory column store |
US8407419B2 (en) | 2010-11-30 | 2013-03-26 | Open Text S.A. | System and method for managing a cache using file system metadata |
US8868512B2 (en) | 2011-01-14 | 2014-10-21 | Sap Se | Logging scheme for column-oriented in-memory databases |
US8972696B2 (en) | 2011-03-07 | 2015-03-03 | Microsoft Technology Licensing, Llc | Pagefile reservations |
US8688954B2 (en) | 2011-08-26 | 2014-04-01 | Microsoft Corporation | Remapping inoperable memory blocks using pointers |
US20130097136A1 (en) | 2011-10-17 | 2013-04-18 | Pie Digital, Inc. | Method and system for acessing domain specific in-memory database management system |
US8838551B2 (en) | 2011-10-21 | 2014-09-16 | International Business Machines Corporation | Multi-level database compression |
US8892586B2 (en) * | 2011-12-23 | 2014-11-18 | Sap Ag | Accelerated query operators for high-speed, in-memory online analytical processing queries and operations |
US8768891B2 (en) | 2012-04-27 | 2014-07-01 | Sap Ag | Ensuring database log recovery consistency |
US9053003B2 (en) | 2012-06-21 | 2015-06-09 | Microsoft Technology Licensing, Llc | Memory compaction mechanism for main memory databases |
WO2014004741A1 (en) | 2012-06-26 | 2014-01-03 | Medio Systems, Inc. | Distributed, real-time online analytical processing (olap) |
GB2504109B (en) | 2012-07-18 | 2020-02-12 | Open Cloud Nz Ltd | Combining scalability across multiple resources in a transaction processing system having global serializability |
US9058268B1 (en) | 2012-09-20 | 2015-06-16 | Matrox Graphics Inc. | Apparatus, system and method for memory management |
US20140136571A1 (en) | 2012-11-12 | 2014-05-15 | Ecole Polytechnique Federale De Lausanne (Epfl) | System and Method for Optimizing Data Storage in a Distributed Data Storage Environment |
US9098522B2 (en) | 2012-11-29 | 2015-08-04 | Sap Se | Version garbage collection using snapshot lists |
US10381106B2 (en) | 2013-01-28 | 2019-08-13 | Hasso-Plattner-Institut Fuer Softwaresystemtechnik Gmbh | Efficient genomic read alignment in an in-memory database |
US9286336B2 (en) | 2013-03-12 | 2016-03-15 | Sap Se | Unified architecture for hybrid database storage using fragments |
US11030055B2 (en) | 2013-03-15 | 2021-06-08 | Amazon Technologies, Inc. | Fast crash recovery for distributed database systems |
US9275095B2 (en) | 2013-07-31 | 2016-03-01 | International Business Machines Corporation | Compressing a multi-version database |
US9659050B2 (en) | 2013-08-06 | 2017-05-23 | Sybase, Inc. | Delta store giving row-level versioning semantics to a non-row-level versioning underlying store |
US9430390B2 (en) | 2013-09-21 | 2016-08-30 | Oracle International Corporation | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications |
US9372743B1 (en) | 2013-09-30 | 2016-06-21 | Emc Corporation | System and method for storage management |
US9489409B2 (en) | 2013-10-17 | 2016-11-08 | Sybase, Inc. | Rollover strategies in a N-bit dictionary compressed column store |
US9977802B2 (en) | 2013-11-21 | 2018-05-22 | Sap Se | Large string access and storage |
US9483516B2 (en) | 2014-03-14 | 2016-11-01 | Sap Se | Multi-version concurrency control across row store and column store |
US9430274B2 (en) | 2014-03-28 | 2016-08-30 | Futurewei Technologies, Inc. | Efficient methods and systems for consistent read in record-based multi-version concurrency control |
US10042870B2 (en) | 2014-10-08 | 2018-08-07 | International Business Machines Corporation | Supporting transient snapshot with coordinated/uncoordinated commit protocol |
US20160125022A1 (en) | 2014-10-31 | 2016-05-05 | Microsoft Corporation | Efficient maintenance of column store indexes on memory-optimized tables |
US9513811B2 (en) | 2014-11-25 | 2016-12-06 | Sap Se | Materializing data from an in-memory array to an on-disk page structure |
US9965359B2 (en) | 2014-11-25 | 2018-05-08 | Sap Se | Log forwarding to avoid deadlocks during parallel log replay in asynchronous table replication |
US9811549B2 (en) | 2014-11-25 | 2017-11-07 | Sap Se | Applying a database transaction log record directly to a database table container |
US10474648B2 (en) | 2014-11-25 | 2019-11-12 | Sap Se | Migration of unified table metadata graph nodes |
US9824134B2 (en) | 2014-11-25 | 2017-11-21 | Sap Se | Database system with transaction control block index |
US9953050B2 (en) | 2014-11-25 | 2018-04-24 | Sap Se | Garbage collection of versions driving the garbage collection of multi-version concurrency control timestamps |
US10747737B2 (en) | 2014-11-25 | 2020-08-18 | Sap Se | Altering data type of a column in a database |
US9778991B2 (en) | 2014-11-25 | 2017-10-03 | Sap Se | Exporting and importing database tables in a multi-user database environment |
US9798759B2 (en) | 2014-11-25 | 2017-10-24 | Sap Se | Delegation of database post-commit processing |
US9891831B2 (en) | 2014-11-25 | 2018-02-13 | Sap Se | Dual data storage using an in-memory array and an on-disk page structure |
US9886464B2 (en) | 2014-11-25 | 2018-02-06 | Sap Se | Versioned bloom filter |
US10725987B2 (en) | 2014-11-25 | 2020-07-28 | Sap Se | Forced ordering of a dictionary storing row identifier values |
US9792318B2 (en) | 2014-11-25 | 2017-10-17 | Sap Se | Supporting cursor snapshot semantics |
US20160147813A1 (en) | 2014-11-25 | 2016-05-26 | Juchang Lee | Distributed transaction commit protocol |
US9875024B2 (en) | 2014-11-25 | 2018-01-23 | Sap Se | Efficient block-level space allocation for multi-version concurrency control data |
US10409864B2 (en) | 2014-11-25 | 2019-09-10 | Sap Se | Transaction control block for multiversion concurrency commit status |
US9665609B2 (en) | 2014-11-25 | 2017-05-30 | Sap Se | Garbage collection of multi-version concurrency control (MVCC) data blocks |
US10558495B2 (en) | 2014-11-25 | 2020-02-11 | Sap Se | Variable sized database dictionary block encoding |
US9779104B2 (en) | 2014-11-25 | 2017-10-03 | Sap Se | Efficient database undo / redo logging |
US10552402B2 (en) | 2014-11-25 | 2020-02-04 | Amarnadh Sai Eluri | Database lockless index for accessing multi-version concurrency control data |
US10296611B2 (en) | 2014-11-25 | 2019-05-21 | David Wein | Optimized rollover processes to accommodate a change in value identifier bit size and related system reload processes |
US9965504B2 (en) | 2014-11-25 | 2018-05-08 | Sap Se | Transient and persistent representation of a unified table metadata graph |
US9898551B2 (en) | 2014-11-25 | 2018-02-20 | Sap Se | Fast row to page lookup of data table using capacity index |
US10255309B2 (en) | 2014-11-25 | 2019-04-09 | Sap Se | Versioned insert only hash table for in-memory columnar stores |
US10042552B2 (en) | 2014-11-25 | 2018-08-07 | Sap Se | N-bit compressed versioned column data array for in-memory columnar stores |
US9971770B2 (en) | 2014-11-25 | 2018-05-15 | Sap Se | Inverted indexing |
US9965513B2 (en) | 2014-11-25 | 2018-05-08 | Sap Se | Set-orientated visibility state retrieval scheme |
US10127260B2 (en) | 2014-11-25 | 2018-11-13 | Sap Se | In-memory database system providing lockless read and write operations for OLAP and OLTP transactions |
-
2014
- 2014-11-25 US US14/553,435 patent/US10042552B2/en active Active
-
2015
- 2015-10-28 EP EP15003084.9A patent/EP3026578B1/en active Active
- 2015-11-20 CN CN201510813340.0A patent/CN105630865B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311930A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 具有重复值的表的块压缩 |
EP2660732A1 (en) * | 2012-04-30 | 2013-11-06 | Sap Ag | Unified table query processing |
Non-Patent Citations (2)
Title |
---|
ERIC W. BROWN 等: "Fast Incremental Indexing for Full-Text Information Retrieval*", 《HTTP://WWW.VLDB.ORG/CONF/1994/P192.PDF》 * |
MARK MUMY: "SAP Sybase IQ 16 Hardware Sizing Guide", 《HTTPS://ARCHIVE.SAP.COM/KMUUID2/C0836B4F-429D-3010-A686-C35C73674180/SAP%20SYBASE%20IQ%2016%20HARDWARE%20SIZING%20GUIDE.PDF》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291041A (zh) * | 2018-12-10 | 2020-06-16 | Sap欧洲公司 | 列数据的非统一分页 |
CN111291041B (zh) * | 2018-12-10 | 2023-06-06 | Sap欧洲公司 | 列数据的非统一分页 |
Also Published As
Publication number | Publication date |
---|---|
US20160147447A1 (en) | 2016-05-26 |
US10042552B2 (en) | 2018-08-07 |
EP3026578A1 (en) | 2016-06-01 |
EP3026578B1 (en) | 2019-05-15 |
CN105630865B (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105630865A (zh) | 用于内存列式存储的n比特压缩版本化列数据阵列 | |
US11119997B2 (en) | Lock-free hash indexing | |
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
CN105630409A (zh) | 使用存储器内阵列和盘上页结构的双重数据存储 | |
CN105630864B (zh) | 存储行标识符值的字典的强制排序 | |
US9779104B2 (en) | Efficient database undo / redo logging | |
US10216629B2 (en) | Log-structured storage for data access | |
US9514211B2 (en) | High throughput data modifications using blind update operations | |
US9875024B2 (en) | Efficient block-level space allocation for multi-version concurrency control data | |
US10255309B2 (en) | Versioned insert only hash table for in-memory columnar stores | |
CN105630860B (zh) | 具有事务控制块索引的数据库系统 | |
CN105868228B (zh) | 为olap和oltp事务提供无锁读取和写入操作的内存数据库系统 | |
US9798759B2 (en) | Delegation of database post-commit processing | |
US9792318B2 (en) | Supporting cursor snapshot semantics | |
US20170083243A1 (en) | Materialing data from an in-memory array to an on-disk page structure | |
US9965504B2 (en) | Transient and persistent representation of a unified table metadata graph | |
US9483513B2 (en) | Storing large objects on disk and not in main memory of an in-memory database system | |
CN104021145A (zh) | 一种混合业务并发访问的方法和装置 | |
US11249968B2 (en) | Large object containers with size criteria for storing mid-sized large objects | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
US10997164B2 (en) | Unified table delta dictionary lazy materialization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |