CN111656341A - 用于lsm数据结构中有效记录查找的高速缓存 - Google Patents
用于lsm数据结构中有效记录查找的高速缓存 Download PDFInfo
- Publication number
- CN111656341A CN111656341A CN201980010105.6A CN201980010105A CN111656341A CN 111656341 A CN111656341 A CN 111656341A CN 201980010105 A CN201980010105 A CN 201980010105A CN 111656341 A CN111656341 A CN 111656341A
- Authority
- CN
- China
- Prior art keywords
- record
- file
- cache
- key
- tree
- 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
- 238000000034 method Methods 0.000 claims abstract description 64
- 230000004044 response Effects 0.000 claims description 33
- 230000008569 process Effects 0.000 claims description 16
- 239000000872 buffer Substances 0.000 claims description 13
- 230000006870 function Effects 0.000 claims description 9
- 238000009795 derivation Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 25
- 238000007906 compression Methods 0.000 description 7
- 238000005201 scrubbing Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 239000006227 byproduct Substances 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 238000007596 consolidation process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 235000013405 beer Nutrition 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Images
Classifications
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache 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
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
- G06F16/86—Mapping to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/16—General purpose computing application
- G06F2212/163—Server or database system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了与维护可用于定位存储在数据结构中的数据的高速缓存有关的技术。在各种实施例中,计算机系统维护具有存储数据库的文件的多个级别的数据结构。这些文件可包括一个或更多个记录,每个记录都有一个键和对应的数据。该计算机系统还可以维护用于数据库的高速缓存,该数据库的条目为键存储数据结构的文件中相应记录的位置的指示。在一些实施例中,计算机系统接收访问存储在数据结构中的特定记录的请求,其中该请求指定可用于定位特定记录的键。计算机系统可以经由键从高速缓存中检索特定记录的位置的特定指示,并且可以使用该特定指示来访问特定记录。
Description
背景
技术领域
本公开总体上涉及数据库系统,并且更具体地,涉及数据库系统内的高速缓存。
相关技术的描述
当企业希望为其用户存储信息时,企业通常采用数据库管理系统,该数据库管理系统以可以被有效访问的有组织的方式存储信息。这样的数据库管理系统通常实现一种组织方案,其中信息被索引并作为具有行和列的表存储在数据库中。而且,数据库管理系统可以通过运行数据库应用程序的多个服务器来实现。这样的应用程序可以基于键/索引值通过搜索表来处理对信息的请求。随着数据量的增长,访问该数据所必需的时间也随之增长。
附图的简要说明
图1是示出根据一些实施例的实现数据库和数据库服务器的数据库系统的示例性元素的框图。
图2是示出根据一些实施例的执行各种功能的例程的示例性元素的框图。
图3是示出根据一些实施例的日志结构的合并树的示例性元素的框图。
图4A-B是示出根据一些实施例的合并过程的示例性元素的框图。
图5是示出根据一些实施例的高速缓存的示例性元素的框图。
图6A-C是示出根据一些实施例的一组清单的示例性元素的框图。
图7是示出根据一些实施例的基于基于值的高速缓存不变性的高速缓存无效方案的示例性元素的框图。
图8是示出根据一些实施例的基于基于位置的高速缓存不变性的高速缓存无效方案的示例性元素的框图。
图9-11是示出根据一些实施例的与维护高速缓存有关的示例性方法的流程图。
图12是示出根据一些实施例的示例性计算机系统的框图。
本公开包括对“一个实施例”或“实施例”的引用。短语“在一个实施例中”或“在实施例中”的出现不一定指相同的实施例。可以以与本公开一致的任何适当方式来组合特定特征、结构或特性。
在本公开内,可以将不同实体(其可以被不同地称为“单元”、“电路”、其他组件等)描述或称为“配置”为执行一个或更多个任务或操作。在本文中使用这种公式——([实体]被配置为[执行一个或更多个任务])——来指代结构(即,诸如电子电路之类的物理事物)。更具体地,该公式用于指示该结构被布置为在操作期间执行一个或更多个任务。可以说某个结构被“配置为”执行某些任务,即使该结构当前未被操作。因此,被描述或陈述为“配置为”执行某项任务的实体是指某种物理事物,诸如设备、电路、存储可执行以实现该任务的程序指令的存储器等。此短语在本文中不用于指代无形的事物。因此,“配置为”构造在本文中不用来指代软件实体,诸如应用程序编程接口(API)。
术语“配置为”并不旨在表示“可配置为”。例如,未编程的FPGA不会被认为是“配置为”执行某些具体功能,尽管它可以“可配置为”执行该功能,可以“配置为”执行编程后的功能。
如本文所使用的,术语“第一”、“第二”等被用作名词之前的标签,并且不暗示任何类型的排序(例如,空间、时间、逻辑等),除非特别说明。例如,在存储九条记录的数据库系统中,术语“第一”和“第二”节点可用于指代九个记录中的任何两个。
如本文所使用的,术语“基于”用于描述影响确定的一个或更多个因素。该术语不排除其他因素可能影响确定的可能性。即,确定可以仅基于指定因素或基于指定因素以及其他未指定因素。考虑一下短语“基于B确定A”。此短语指定B是用于确定A的因素或影响A的确定的因素。此短语不排除对A的确定也可以基于某些其他因素,诸如C。该短语还旨在涵盖其中仅基于B确定A的实施例。如本文所使用的,短语“基于”因此与短语“至少部分地基于”同义。
具体实施方式
本公开描述了用于维护可用于定位存储在日志结构的合并树中的记录的高速缓存的技术。如本文所使用的,术语“日志结构的合并树”或“LSM树”指的是至少包括存储器组件和磁盘上组件的组织方案,其中数据首先被写入存储器组件,然后被传输到磁盘上组件,然后从顶层开始通过磁盘上组件上的数据结构的各级别将其向下“合并”。合并可以允许数据随着时间流逝被写入速度较慢、价格较低的存储介质。LSM树的其他方面可基于其实现包括一旦写入就不可变的文件,磁盘上组件中每个级别(例如,文件数)的变化的大小以及包括有序记录集的文件。LSM树可以考虑提高的写入速度(在诸如B树之类的结构上),因为可以将数据写入磁盘上组件的根级别,而不是定位和覆盖该数据的先前版本。
在下面描述的各种实施例中,数据库系统维护高速缓存,该高速缓存具有为特定键存储记录在日志结构的合并树中的位置的条目。在这样的实施例中,数据库系统中包括的数据库服务器接收为特定记录指定主键的请求。在各种实施例中,数据库服务器检查高速缓存中与键对应的条目,并且如果不存在这样的条目,则服务器搜索日志结构的合并树。在某些实施例中,在特定记录位于日志结构的合并树内之后,数据库服务器在高速缓存中并与键相关联地存储该特定记录的位置。在各种实施例中,数据库服务器接收指定辅助键而不是主键的请求。在这样的实施例中,数据库服务器可以使用辅助键来扫描索引结构以便定位对应的主键,数据库服务器使用该主键来访问相应的记录。
这些技术可能优于现有方法,因为可以快速且更高效地访问LSM树内的记录。即,该技术可以允许在恒定的摊销(amortized)时间内实现在LSM树的磁盘上组件中的直接键查找。此外,由于减少了与直接键查找(这是涉及辅助键的查找的组成部分)相关联的成本,因此涉及辅助键的查找可能更加高效。
现在转到图1,描绘了数据库系统10的框图。在所示的实施例中,数据库系统10包括数据库100和数据库服务器140。如图所示,数据库100包括:具有级别110、120和130的日志结构的合并树105;以及清单107。而且,如图所示,数据库服务器140包括高速缓存和LSM树例程150以及高速缓存160。虽然未示出,但是在一些实施例中,数据库系统10包括彼此通信并且与多个数据库100通信的多个数据库服务器140。在存在多个数据库100的实施例中,树105的各个级别(例如110、120等)可以分布在那些数据库上。尽管未示出,但是在各种实施例中,应用服务器经由数据库服务器140向数据库100提交记录并从数据库100读取记录。在一些实施例中,数据库系统10的实现与所示出的不同-例如,高速缓存160可以驻留在其自己的服务器上,并且树105可能包括附加级别。
在各种实施例中,数据库100是配置为存储系统10的用户的数据(例如,记录)的共享存储。在一些实施例中,数据库100由通过网络(例如,存储附加网络)连接在一起并配置为冗余地存储数据以防止数据丢失的多个存储设备来实现。数据库100可以以防止给定租户未经许可访问另一租户的数据的方式存储多个租户(及其用户)的数据。在一些实施例中,数据库100处理来自数据库服务器140的用于从树105读取数据或将数据写入树105的命令142。因此,在一些实施例中,响应144可以包括来自数据库100的记录、来自数据库100的元数据(例如,清单107)、记录已成功写入数据库100的确认等。
在各种实施例中,日志结构的合并树105是一种数据结构,该数据结构以使用基于级别的方案的有组织的方式存储文件。因此,级别110、120和130可以包括具有记录的一组文件,所述记录存储数据和可用于访问该数据的相应索引(键)。在一些实施例中,由于读取操作可能需要考虑可能潜在地存在记录的几个位置,所以树105被设计为在效率方面偏向于写入而不是读取。例如,读取操作可以导致一系列搜索,这些搜索在树105的各个级别中进行。在各种实施例中,级别110、120和130存储不同数量的文件以提高读取性能。(例如,如图所示,级别110包括文件115A-L,级别120包括文件125A-T,级别130包括文件135A-Z。)每个级别中不同数量的文件使树105看起来像树结构,其中顶层存储的文件数量最少,随后每个较低的层都比上一层存储更多的文件。在各种实施例中,新文件经由命令142被写入级别110(在这种情况下,是顶层(top level))。一旦级别110包括某数量的文件,则在一些实施例中,数据库系统10执行压缩过程,在该压缩过程中级别110的文件中的记录被向下合并或复制到下一级别,即级别120。当任何级别包括阈值数量的文件或记录时,数据库系统10可以针对该级别执行此压缩过程。这样做时,数据库系统10可以维护树结构和改善的读取性能。日志结构化的合并树105和合并过程在下面参考图3和图4A-B更详细地描述。
在各种实施例中,清单107包括描述树105的元数据和其中包含的文件。在各种实施例中,清单107是树105在不同时间点的各个快照。即,清单107中的每个清单包括在给定时间点描述树105及其级别的元数据。在其他实施例中,清单107可以是单个大清单,当树105发生变化时,清单将被重写。另外,在日志的上下文中,特定清单107可以指代该日志的特定部分。在一些实施例中,各个清单107的创建是由将记录写入顶层和/或压缩/合并过程而产生的。
在一些实施例中,清单107指定包括在树105的每个级别中的文件及其对应的键范围。(参考图3更详细地讨论键范围)。因此,当处理来自应用服务器的数据请求141时,数据库服务器140可以检索特定清单107并读取它,以确定哪些文件可能包含所请求的记录。也就是说,在各种实施例中,服务器140将来自应用服务器的数据请求141中包括的键与给定清单107所引用的各种文件的键范围进行比较。可以检索具有与包括在该请求中的键重叠的键范围的文件。清单107在下面参考图6A-C更详细地描述。
在各种实施例中,数据库服务器140维护数据库100并处理对从数据库100读取数据或向数据库100写入数据的请求。服务器140可以包括一组软件例程、硬件或其组合。在一些实施例中,服务器140从应用服务器接收对记录的数据请求141,并且与数据库100通信以返回所请求的记录。同样,服务器140可以接收对将记录写入数据库100的请求。在各种实施例中,服务器140通过执行例程150来维护数据库100(并因此维护树105)。
在各种实施例中,高速缓存和LSM树例程150是一组软件例程,其促进树105的维护和对来自应用服务器的请求141的处理。在各种实施例中,例程150包括用于将来自树105的给定级别的文件合并(或复制)到树105的另一级别的软件例程。另外,例程150可以包括用于清理在将其内容复制到树105的另一级别之后保留下来的文件的例程。例程150可以进一步包括例程,该例程将记录的批次写入树105,并使高速缓存160中与记录相对应的条目无效。在一些实施例中,例程150产生线程,该线程执行由软件例程定义的这些任务(例如,读取、写入、复制、清理、无效等)。在各种实施例中,当搜索特定记录时,例程150基于与该记录相对应的键157来搜索高速缓存160。在某些情况下,高速缓存160可以提供指针165,该指针165指定该特定记录位于树105中的何处。参考图2更详细地描述例程150。
在各种实施例中,高速缓存160是能够存储可用于访问存储在树105中的记录的数据的数据结构。在一些实施例中,高速缓存160实现键-值存储,其中可用于访问特定记录的数据响应于被提供与该记录相关联的键157而返回。在各种实施例中,根据主键157(例如,唯一行标识符)来组织树105。涉及主键157的查找可以包括一系列O(log n)操作(例如,识别树105内的哪个级别具有与该键重叠的键范围,并导航到树105的给定级别内的记录)。因此,在各种实施例中,高速缓存160允许在不产生O(log n)成本的情况下查找记录。此外,涉及辅助键157的查找也可以从高速缓存160中受益。在各种实施例中,涉及辅助键157的查找包括:1)通过搜索索引结构(例如,B+树)来确定对应的主键157,然后2)使用主键157在树105中执行直接键查找。因此,在各种实施例中,高速缓存160存储使用主键157可访问的指针(指向记录),以便与辅助键查找相关联的直接键查找成本不会发生。然而,高速缓存160可以存储使用辅助键157而不是主键157可访问的指针。在各种实施例中,作为查找的结果(在树105中),高速缓存160用指针填充,该查找涉及给定键。
在各种实施例中,高速缓存160存储标识数据库100中可以存储给定记录的位置的数据(例如,指针)。如上所解释的,树105可以随着向其写入新文件而不断地对其自身进行重组。因此,可以为高速缓存160实现用于处理树105的变化性质的各种方案。两种特定方案使用所谓的基于位置的不变性(invariant)或基于值的不变性。在前一种选项中,高速缓存160引用(reference)具有最新版本的特定数据的最新记录,而在后一种选项中,高速缓存160引用特定数据的最新版本,即使存储数据的记录不再可经由最新清单107访问。
相应地,在基于位置的不变性的实施例中,当发生合并使得参考数据向下一级合并时,高速缓存160中的条目可以被更新以引用存储参考数据的新记录。因此,高速缓存160中的条目可以被更新以反映在树105中可以找到参考数据的最近位置。另一方面,在基于值的不变性的实施例中,当文件的内容被合并到树105中的较低级别中时,原始文件可以被维护,直到引用该文件中的记录的高速缓存160的条目已经被无效。因此,每当将参考记录向下合并到树105的另一级别时,都不需要更新高速缓存160中的条目。下面参考图5更详细地描述高速缓存160和这两种方案。
因此,在一种实现方式中,数据库系统10维护具有各个级别(例如115、125等)的日志结构的合并树105,每个级别包括存储数据的各种记录。在这样的实现中,系统10进一步包括具有高速缓存和LSM树例程150以及高速缓存160的数据库服务器140。这样,在接收到对树105内的某记录的请求时,服务器140可以搜索树105的文件以定位记录并可以将其位置的指示存储在高速缓存160的条目中。可以使用主键157或辅助键157访问该条目。在接收到对该记录的另一请求后,服务器140可以使用对应于该记录的键157来定位高速缓存160内的其条目。在这样的实现中,服务器140从高速缓存160检索指针165,然后随后访问相应的记录。该方法可能是有利的,因为它允许更快且更高效地在系统10中查找记录。也就是说,代替直接键查找产生成本,服务器140可以通过检索指向高速缓存160中其位置的信息来快速识别记录位于何处。
如上所解释的,在各种实施例中,例程150包括一组软件例程,以执行与维护和访问高速缓存160相关联的各种任务。现在参考图2更详细地讨论这些软件例程的示例。
现在转向图2,描绘了例程150的框图。如上所述,例程150可以处理树105和高速缓存160的维护。在所示的实施例中,例程150包括各种例程,其包括存储例程204、合并例程210、清理例程220和其他逻辑例程230。在一些实施例中,例程150可以与所示出的不同地实现。例如,例程204、210、220或230可以完全以硬件实现。
在各种实施例中,存储例程204是可执行以填充和/或使高速缓存160中的条目无效的一组例程。这样,当填充条目或使条目无效时,例程210、220和230可以调用(直接或间接地)存储例程204以填充或使高速缓存160中的该条目无效。存储例程204可以是例如开源程序(诸如REDIS)。
在各种实施例中,合并例程210是可执行以执行压缩过程以将来自树105的一个级别的记录合并到树105的另一级别的一组软件例程。在一些实施例中,合并例程210还可以执行以使与受合并影响的记录相关联的高速缓存160中的条目无效。如上所述,在给定的时间点,树105的级别可以存储比该级别期望的更多的记录。因此,在一些实施例中,执行合并例程210以将记录合并到能够存储比从中获取该记录的级别更多的记录的另一级别。在各种实施例中,将记录合并到另一级别包括将其内容复制到新文件中。在一些实施例中,键范围用于确定哪些记录将被合并到下一级别。在某些情况下,合并包括将已经在下一级别中的记录(与键范围重叠的记录)复制到新文件中,以使新文件包括来自更高级别的记录以及与新文件所在级别相同级别的记录。在各种实施例中,执行合并例程210导致在原始记录的内容被合并到另一级别之后,原始记录保留在给定级别中。因此,在一些实施例中,例程150执行清理过程以去除剩余的记录。
在各种实施例中,清理例程220是可执行以处理从压缩过程中遗留的文件的移除的一组软件例程。如上所述,文件可以在合并之后被保持,直到高速缓存160不再引用那些文件内的记录。因此,在各种实施例中,可执行清理例程220以确保在完全移除文件之前,高速缓存160不包含该文件的任何条目。因此,清理例程220可以使高速缓存160中与要移除的文件相关联的条目无效。在各种实施例中,例程220进一步确保没有线程可能仍在有效地使用它们在无效之前获得的信息。在一些实施例中,例程220使用清单107来确定是否存在进行中的线程。在此类实施例中,可以将进行中的线程与某个清单107相关联,使得该清单的无效指示进行中的线程不再存在。参考图7更详细地描述。在各种实施例中,在确定高速缓存160中没有条目引用特定文件并且没有进行中的线程能够访问该文件之后,例程220移除该特定文件。在一些实施例中,例程220包括指示要移除的文件的清理队列。在文件不再被当前清单107(例如,尚未过期的清单107)引用之后,可以将它们添加到清理队列。
在各种实施例中,其他逻辑例程230包括促进处理来自应用服务器的数据请求的软件例程。数据请求可以包括向服务器140的本地内存中缓冲区(in-memory buffer)中写入记录以及从中读取记录,或者向树105中写入记录以及从中读取记录(如果所请求的记录不在内存中缓冲区中)。在一些实施例中,其他逻辑例程230在将它们的内容写入树105之前将记录写入内存中缓冲区。也就是说,在累积多个记录之后,其他逻辑例程230可以将记录写入树105的顶层(例如,级别110)作为文件115。在各种实施例中,将记录写入树105的顶层将触发压缩过程,因为顶层现在可能包含比其应有的更多的文件或记录。在各种实施例中,在将累积的记录写入树105之后(或在将它们写入树105之前),其他逻辑例程230使高速缓存160中具有与写入到树105的记录中所包括的那些相对应的键的条目无效。
相应地,例程204、210、220和230的执行可以允许服务器140通过将记录写入树105并随后将这些记录向下合并到树105的各个级别来维护树105。此外,例程204、210、220和230的执行可以允许服务器140维护高速缓存160,从而确保尽管树105的性质发生了变化,高速缓存160中的有效条目仍指向存在的记录。
在进一步研究高速缓存160之前,所附的图3、图4A和图4B的描述为高速缓存160的某些方面提供了基础。图3及其描述首先详细说明了树105的示例性组织方案,包括存储在树105的级别内的记录。然后,所附的图4A和图4B的文本描述了用于在数据结构(诸如树105)内将来自一个级别的记录合并到另一级别的示例性过程。
现在转到图3,描述了日志结构的合并树105的组织的框图。如上所述,树105可以是以使用基于级别的方案的有组织的方式存储文件的数据结构。在所示的实施例中,树105包括:具有文件115A-C的级别110;具有文件125A-C的级别120;以及具有文件135A-F的级别130。同样,如图所示,文件115A包括记录310,其包括记录310A-F。在所示的实施例中,沿着代表键空间320的x轴和代表时间330的y轴放置文件115、125和135。尽管未示出,但是在一些实施例中,一级中的文件包括在时间330上与另一级的文件中的其他记录重叠的记录。在各种实施例中,日志结构的合并树105可以与所示的方式不同地实现,例如,树105中的每个级别可以包括相同数量的文件。
在各种实施例中,记录310是数据项,每个数据项与可用于访问该数据项的特定键相关联。例如,数据库表可以包括公司名称、街道地址和电子邮件的列。因此,记录310A可以代表该表中的行,并且可以包括特定公司的名称、街道地址和电子邮件。在各种实施例中,每个记录310都可以包括时间戳、键(例如,存储在每行中的唯一值)和有效载荷(例如,数据值)。在各种实施例中,给定记录310的键可用于索引该记录并在树105中定位它。在一些实施例中,给定记录310与一个以上的键相关联,因此可通过一个以上的键(例如,辅助键)来访问。
在各种实施例中,记录310是不可变的,使得一旦将它们写入,就不能对其进行修改。因此,在这样的实施例中,对由给定记录310指定的数据的改变导致创建新记录310。例如,考虑存储用户名“鲍勃”的记录310。如果用户名更新为“比尔”,则创建新记录310,而不是修改存储“鲍勃”的记录。这样,记录310可以代表对数据库表中的行的改变。在各种实施例中,记录310与影响存储在数据库100处的数据的数据库操作(例如,插入、删除和更新)相关联。在各种实施例中,记录310最初被创建并存储在数据库服务器140的内存中缓冲区中,直到该缓冲区中发生记录310的累积。一旦在缓冲区中有记录310的积累,则服务器140可以将记录310写入树105作为文件115。这样,在各种实施例中,文件115、125、135等是记录310的集合/分组,记录310在数据库系统10的操作期间的不同时间被写入。
在各种实施例中,键空间320是键的范围,其包括用于索引树105中的记录310的所有键。如上所述,各个记录310可以包括标识该记录310的唯一键。因此,在各种实施例中,文件115、125、135等各自与由它们所包含的各种记录310定义的键的范围相关联。在一些实施例中,当记录310被写入给定文件时,它们被写入为有序集合,以使得该文件中的第一和最后记录310定义该文件的键范围。如所示,例如,文件135A-C中的每一个分别与键范围325A-C相关联。在各种实施例中,除了级别110之外,树105内的每个级别(例如,级别120、130等)都不包括重叠的键范围。另外,在这样的实施例中,清单107可以包括指定给定级别内的每个文件的键范围的信息。因此,当搜索特定记录310时,数据库服务器140可以查阅清单107,并且可以在每个级别(级别110除外)中仅搜索一个文件,因为键范围可以不重叠。在各种实施例中,当执行压缩过程时,系统10将非重叠文件保持在级别120、130等中。这参考图4A-B更详细地描述。
在各种实施例中,时间330表示与系统10的操作相关联的时间的进度。在所示的实施例中,沿时间轴330向下移动表示在时间上向后移动。即,可以在树105的较低级别中找到较旧的记录310。因此,在各种实施例中,当在树105中搜索数据时,可以在较低级别(例如级别130)之前搜索较高级别(例如级别110)内的记录310,因为较高级别中的记录310是较新的,因此可以包括该数据的较新值。在各种实施例中,文件115、125、135等各自与由它们包含的记录310定义的特定时间330界限相关联。尽管未示出,但是在一些实施例中,文件115、125、135等可以在时间330上跨层重叠。例如,文件125A可以包括与文件135C内的记录310同时粗略地创建的记录310。
因此,数据库服务器140可以维护树105,以使树105中的每个级别(级别110除外)都包括在键空间320中不重叠并且在时间330上相对接近的记录310。以这种方式维护树105,由于较新的记录310更加靠近树105的顶层,因此可以更高效地定位记录310,并且由于键范围325在键空间320中不重叠,所以每个级别(级别110除外)中只有一个文件需要针对给定的记录310被搜索。
因此,树105是一种数据结构,其中记录被定期移动到树的不同级别。接下来描述的图4A和图4B描绘了两种不同的这种情况。
现在转到图4A,示出了合并过程的框图,其中文件的内容从一个级别被合并到另一级别。如上所解释的,一旦树105中的给定级别包括某数量的文件,数据库系统10就可以将那些文件中的记录310写入树105的下一级别中的新文件。在所示的实施例中,树105的两个版本被示出,例如,合并410之前和之后的。如合并410前版本(在左侧示出)所示,树105包括具有文件125A-B的级别120和具有文件135A-D的级别130。如合并410后版本(在右侧示出)所示,树105包括具有文件125A-B的子集的级别120和具有文件135A和135D-H的级别130。注意,文件135E和135H也可以被认为是文件135B和135C;然而,由合并410创建的新清单限制了文件135B和135C有效的键范围。如参考图4A所描绘和讨论的,可执行合并410以将级别120的文件125中的记录合并到级别130的新文件135中。在各种实施例中,基于级别向下合并不同地实现合并过程,如参考图4B所讨论的。在各种实施例中,作为执行合并例程210的结果来执行合并410。
在各种实施例中,合并410是用于将一个级别(例如,级别120)的记录310与另一级别(例如,级别130)的记录310合并的过程。这样,在各种实施例中,合并410导致创建具有来自两个级别(例如,级别120和130)的记录310的新文件。在一些实施例中,响应于给定级别中的文件数量超过阈值量而执行合并410。在其他实施例中,基于数据库服务器140周期性地合并记录310的时间方案执行合并410。在又一些其他实施例中,在没有触发机制的情况下连续执行合并410—例如,只要有记录310,服务器140就不断地合并记录310。在各种实施例中,服务器140基于合并范围420确定要合并哪些记录310。
在各种实施例中,合并范围420是定义键的范围的信息,该键可用于选择要从树105中的两个或更多个不同级别110、120、130等合并的特定记录310。在一些实施例中,范围420内的键的数目由系统10的用户指定。在其他实施例中,范围420内的键的数目基于合并记录310的紧迫性而动态变化(例如,增加或减少)。例如,如果对数据库100的写入量很大,则可能需要合并更多记录310,因此范围420可能比另外的情况要宽。在各种实施例中,在每次合并410之后移动范围420,使得新范围420在最后的范围420停止的地方开始(例如,以键空间320中的下一个键开始)。因此,在到达键空间320中的最后一个键时,键范围420可以回环/循环回到键空间320中的开始键。在一些实施例中,范围420基于所选文件指定键的范围,使得合并410在一次合并中合并该文件中的所有记录310。
在各种实施例中,合并410选择来自合并410所涉及的两个或更多个级别的并且落入合并范围420内的记录310。如所示,例如,范围420包括来自文件125A、125B、135B和135C的记录310。因此,数据库服务器140可以将落入合并范围420内的特定记录310写入新文件。在一些实施例中,当该文件落入范围420内时,服务器140写入(被合并到的级别中的)文件中包括的所有记录310。例如,由于文件135B的一部分落在范围420内,因此文件135B内的所有记录310都可以被写入新文件。在各种实施例中,记录310作为有序集被写入新文件中,该有序集是基于与那些记录相关联的键。在各种实施例中,服务器140将记录310写到新文件中,直到该文件达到特定大小为止,此时服务器140可以将剩余的记录写到另一新文件中。即,树105中的文件115、125、135等可以保持在某大小(例如2兆字节)下,因此合并记录310可以导致创建多个新文件。如所示,例如,合并410导致文件135E-H的创建。
在各种实施例中,数据库系统10维护原始文件115、125、135等,其记录310已经被向下合并树105内的级别。因此,在一些实施例中,当执行合并410时,数据库服务器140更新清单107以指示给定文件内的特定记录310已被合并。即,可以生成新清单107,其为给定文件指定排除该文件中已合并的记录310的键范围325。在一些实施例中,服务器140更新文件以反映该文件内的特定记录310已经被合并,例如,附加了与已经被合并的记录310相关联的键范围。在各种实施例中,合并410导致给定文件内的一组记录310被合并,因此可以在该文件被完全合并之前被执行多次。一旦文件已经被完全合并,系统10可以在清理队列中执行该文件,然后执行清理过程以移除该文件。因此,原始文件115、125、135等可以仅维持有限的时间段。
现在转到图4B,描述了其中文件的内容从一个级别被合并到另一级别的合并过程的框图。在所示的实施例中,示出了树105的两个版本—例如合并430之前和之后。如合并430之前的版本(在左侧示出)所示,树105包括具有文件115A-C的级别110和具有文件125A-D的级别120。如合并410之后的版本(在右图示出)所示,树105包括具有文件125A和125C的子集的级别110和具有文件135A和135D-H的级别120。如参考图4B所描绘和讨论的,可执行合并410以将级别110的文件115中的记录合并到级别120的新文件125中。作为执行合并例程210的结果执行合并430。
在各种实施例中,级别110(即树105的顶层)相对于树105中的其他级别(例如120、130等)包括唯一属性,因为它包括具有重叠的键范围325的文件。如所示,例如,文件115A-C在键空间320中重叠,而文件125A-D不重叠。因此,在一些实施例中,合并430与合并410的不同之处在于,合并430处理重叠的文件115。也就是说,合并430可以表示一种独特的情况,其中文件从树105的顶层(例如,级别110)被合并到树105的下一级别(例如,120)。因此,合并430可以从同一级别的多个文件中选择记录310,这些记录在键空间320中重叠,然后可以将它们向下合并到树105的下一级别中。
因此,合并410和430可以确保树105中的级别110、120、130等不会增长超过为该级别设置的特定大小。这样做时,合并410和430在访问来自树105的数据时可以使数据检索时间保持较低。但是,合并410和430导致记录310从树105中的一个级别合并到另一级别。
已经描述了树105的结构以及从树的一个级别到另一级别的数据的合并,现在参考图5讨论高速缓存160,包括用于处理树105的变化性质的两种不同的不变性方案。
现在转到图5,描绘了高速缓存器160的框图。在所示的实施例中,高速缓存160包括键157A-B和相应的指针165A-B,其指示日志结构的合并树105的文件115A内的记录310A和310C。虽然未示出,但是指针165可以指示树105内的任何文件(例如,文件115A-B,文件125A-B等)中的记录310。在一些实施例中,高速缓存160可以与所示的方式不同地实现。例如,指针165可以指示文件(例如,文件115、125、135等)而不是各个记录310。
在各种实施例中,高速缓存160是能够存储可用于访问存储在树105中的记录310的数据的数据结构。可以经由软件例程、硬件或其任何组合来实现高速缓存160。如上所述,高速缓存160可以实现键-值存储。在一些实施例中,键157是可用于识别它们所对应的记录310的标识符(在某些情况下,是唯一的)。因此,当在树105中搜索特定记录310时,数据库服务器140可以将所提供的键157与被搜索的树105内的每个记录中的键157进行比较,直到发现特定记录310为止。一旦发现特定记录310,服务器140就可以与该记录310相关联地存储指针165。在一些实施例中,每个指针165都提供在树105中可以找到相应记录310的位置的指示。在一些实施例中,指针165指定文件名(或文件地址)以及可以在其中找到相应记录310的文件中的偏移量。这样,服务器140可以使用指针165比搜索树105更快地定位记录。
在各种实施例中,作为搜索树105和定位记录310的结果,向高速缓存160填充条目。在一些实施例中,一旦特定记录310位于树105中,则例程150发出存储请求530以为对应的键157存储指针165,指针165指示该记录310位于树105中的何处。因此,在接收到对记录310的请求时,例程150可以将请求中包含的特定键157提供给高速缓存160。结果,高速缓存160可以将指针165返回给相应记录310。在一些实施例中,键157被散列(并且可能被截断为高速缓存160所支持的条目数量内的值)以导出索引值,特定的指针165可以以该索引值被存储。因此,在各种实施例中,高速缓存160并不存储键157。这可以允许对高速缓存160的条目进行原子更新,并且还可以减小高速缓存160的存储器大小。在各种情况下,两个或更多个键157可以散列到相同的特定索引。因此,在一些实施例中,当存储新指针165时,其对应的键157散列到存储另一指针165的索引,则存储该新指针165而不是另一较旧的指针165。也就是说,在键157针对高速缓存160中的给定条目冲突的实施例中,该给定条目可以用新指针165覆写。因此,当从高速缓存160接收到指针165时,例程150可以检查特定记录310以查看其键是否匹配。如果键不匹配,则向例程150提供可能是键冲突的对象的指针165。如前所述,可以使用基于值的不变性或基于位置的不变性来实现高速缓存160。尽管下面讨论了这些不变性,但其他不变性也可以用于实现高速缓存160。
在各种实施例中,高速缓存160实现基于值的不变性方法,其中指针165提供存储特定数据的最新版本的当前或非当前记录310的位置或指示存储特定数据的最新版本的当前或非当前记录310。如本文所使用的,相对于某些特定数据,术语“当前记录”是指存储特定数据的最新创建的记录,而术语“非当前记录”是指存储相同特定数据的记录,但不是最新创建的记录。例如,最初写入树105的顶层的特定记录310是其数据的当前记录。当该记录310被复制到树105的下一级别时,该记录310的副本成为当前记录,而被复制的顶层中的特定记录310成为非当前记录。即,每次将记录310复制到树105的下一级别时,则该副本就成为当前记录。因此,在其中使用基于值的不变性的实施例中,高速缓存160包括指示特定记录310的指针165,而不管那些记录310是当前的还是非当前的。也就是说,只要所指向的特定数据没有被修改,则在合并410或430的情况下,指针165就不需要被更新以指向当前记录310。如上所述,将记录310从一个级别复制到另一级别可能不会改变其内容。因此,在一些实施例中,响应于记录310被合并(或复制)到树105的另一级别中,高速缓存160的指针165不会被无效。在一些实施例中,响应于指针165所指向的数据被更新并存储为新记录310—例如,服务器140执行更新操作,该操作会修改表中的行,其中该行对应于指针165指向的特定记录310,指针165被无效。在一些实施例中,响应于清单107中的任何一个不再引用其相应文件,指针165逐渐无效。也就是说,如果所有清单107都没有引用该文件,则该文件可能无法通过清单107进行访问,因此,没有指向该文件的新指针165被添加到高速缓存160中。因此,服务器140可以开始使条目无效,而不必担心将添加指向该文件的新指针165。在一些实施例中,基于回收(recycle)别名(aliases)的需要对无效指针165进行优先级排序。
在各种实施例中,别名是可以用于替代文件名的值。在一些实施例中,指针165指定文件名以及特定记录可以位于的该文件中的偏移量。然而,在某些情况下,文件名可能太长而无法存储在高速缓存160中。特别地,在各种实施例中,高速缓存160包括大小受限制的条目,以允许使用原子存储指令将指针165存储在那些条目中。这样,在各种实施例中,高速缓存160使用别名而不是文件名。即,指针165可以指定别名而不是指定文件名,因为别名的长度可以较短—例如,别名可以是16位的数字而不是64位的数字。在各种实施例中,系统10维护别名到文件名的映射。因此,响应于从高速缓存160中检索指针165,服务器140可以将该指针的别名转换为文件名,其用于获取关联文件中的记录。在各种实施例中,系统10确保如果别名在高速缓存中,则映射中将存在条目。另外,在一些实施例中,系统10维护有限数量的别名。这样,系统10可能需要回收别名以便将其用于另一文件。因此,在各种实施例中,在文件不再被清单107引用之后,系统10使高速缓存160中与正被回收的别名相关联的条目无效。在高速缓存160不再包括与该别名相关联的条目之后,则可以移除别名和与该别名相关联的文件之间的映射,从而回收该别名。
在一些实施例中,高速缓存160实现基于位置的不变性方法,其中指针165提供存储特定数据的最新版本的当前记录310的位置或指示存储特定数据的最新版本的当前记录310。像其他不变性一样,可以响应于具有相同的对应键157的记录310从内存中缓冲区被刷新到树105,来使指针165无效,因为刷新可以指示所指向的数据已被修改。在一些实施例中,响应于所指向的数据被合并/复制到树105的另一级别中,使指针165无效或更新指针165。另外,可以基于回收别名的需要使指针165无效。下面参考图8更详细地描述基于位置的不变性。
在两种不变性方法中,当记录从内存中缓冲区中刷新并作为文件115被写入LSM树105中时,在各种实施例中,高速缓存160中的特定条目将被无效。特别地,对应于要添加到LSM树105的记录的键157的条目被无效。在各种实施例中,在高速缓存无效的开始与由刷新操作创建的新清单107变得可用的时间之间,防止了线程对高速缓存的填充。特别地,在这样的实施例中,阻止了在那个时间期间在较旧的清单107(即,将被新清单107替换的清单107)上运行的线程填充高速缓存160,以确保没有线程用记录填充高速缓存160,该记录将不再随新清单107的发布而可高速缓存,这将更改可高速缓存记录的集合。
因此,尽管其他不变性可能是可行的,但是在实现基于位置的不变性或基于值的不变性时,可以确保高速缓存160中的条目(其是有效的)存储指向树105内存在的记录310的指针165。如前所述,在基于值的不变性中,高速缓存160可以包括指针165,该指针165指示由于合并410或430而已完全合并的文件中的记录310。虽然系统10可以维护特定文件(其已完全合并)一段时间,可能想要移除该文件。因此,在一些实施例中,系统10执行清理过程,以使高速缓存160中的条目无效并移除期望的文件(例如,数据库服务器140执行清理例程220)。在描述如何执行此操作之前,参考图6A-6C进一步描述清单107的概念,因为清单在图7中讨论的示例性清理程序中起作用。
现在转到图6A,示出了一组清单107的框图。在所示实施例中,数据库100包括引用文件115A-C的清单107A-C。如前所述,清单107可以是指定树105在不同时间点处的快照的各个文件(或单个文件)。因此,清单107A可以表示树105的最早的、有效的(例如,仍在使用)快照,而清单107B和107C可以表示树105的渐进的稍后的快照。如图6A进一步所示,文件115B已经部分地合并到树105的另一级别(由文件115B的框指示,该框的一部分为虚线)。因此,如图6B和6C所示,文件115B已经被完全合并(由文件115B的框指示,其完全为虚线)。
在某些实施例中,当搜索特定记录310时,数据库服务器140读取清单107以确定该记录可能位于的树105中的可能位置。特别地,在各种实施例中,实现例程150的线程接收对树105内的特定记录310的请求。在这样的实施例中,这些线程可以与它们在其整个生命周期中查阅的特定清单107相关联。考虑一示例,其中在系统10的操作期间在不同点产生了两个线程。在这样的示例中,两个线程之一可以与清单107A关联,而另一线程可以与清单107B关联。这样,当第一线程接收到对记录310的请求时,它可以读取清单107A而不是清单107B(或107C)。这样,给定线程是否可以访问特定文件中的记录310可能取决于何时生成它,因为其对应的清单107可能不使用该文件引用该记录。
现在转到图6B,示出了一组清单107的框图。在所示的实施例中,数据库100包括清单107B-D。如图所示,清单107B和107C引用文件115A-C;但是,清单107D引用文件115A和115C,而不引用文件115B。与图6A相反,图6B表示系统10的操作期间的较晚时间。如图6A和图6B之间的差异所示,清单107D已被添加,清单107A已过期。
在各种实施例中,清单107响应于记录310从数据库服务器140的内存中缓冲区中被刷新并作为文件115写入树105来创建。在各种实施例中,响应于执行合并410或430来创建清单107。如图示的实施例中所示,文件115B的内容已经被完全合并/复制到树105的另一级别中。这样,可以响应于文件115B的内容被完全合并来创建清单107D。如上所述,实现例程150的线程可以与特定清单107相关联。因此,特定线程可以与清单107D相关联。因此,该线程可能无法通过清单107D访问文件115B;但是,它可以通过高速缓存160访问文件115B,只要该文件存在并由高速缓存160中存储的指针165引用即可。但是,与清单107B和107C关联的其他线程可以通过那些清单访问文件115B。
现在转到图6C,示出了一组清单107的框图。在所示的实施例中,数据库100包括清单107D-F。如所述,清单107D-F引用文件115A和115C;但是,这些清单107都没有引用文件115B。与图6A和图6B相反,图6C表示系统10的操作期间的较晚时间。如图6C与图6A和图6B之间的差异所示,清单107E和107F已经添加,清单107B和107C已经过期。
在各种实施例中,清单107在不是最新清单107时以及在没有线程引用它时过期。特别地,当线程需要访问树105时,它可以获取对最新清单107的引用。当线程完成访问树105时,它可以释放该引用。在一些实施例中,如果相同的线程需要随后访问树105,则其接收对是最新的清单107的新引用。(请注意,线程在其整个存在期间可引用不同的清单107)。在一些实施例中,清单107基于相关联的线程(其实现例程150)不再存在而过期。即,当产生线程时,它们可以与数据库100的特定清单107相关联。因此,当创建较新的清单107时,随后产生的线程可以与该较新的清单107相关联。因此,它可能是在某个时间点上,不再有新产生的线程与较旧的清单107关联的情况。因此,当与较旧的清单107关联的线程已终止时,则没有线程将在读取该清单107,因此它可能已过期(例如,已存档或已删除)。在其他实施例中,较旧的清单107在达到或超过清单107的阈值数量之后过期。在其他实施例中,清单107基于一些定义的时间流逝量而过期。在各种实施例中,当没有清单107引用给定文件时,则可以将该文件放置在清理队列中并随后将其移除。例如,由于在与图6C相关联的时间点没有清单107引用文件115B,则该文件可以被放置在清理队列中并且随后被移除。
相应地,清单107可用于确定指向特定文件的附加指针165是否可存储在高速缓存160中。如前所述,可以作为查找记录310的副产品填充高速缓存160。因此,如果有效清单107中没有一个引用特定文件,则不能通过清单107来定位该文件。(其他方式可能用于访问该文件,例如通过高速缓存160。)这样,在一些实施例中,指向该特定文件的新指针165将不会作为查找的副产品添加。清单107可以另外用于确定某些线程是否能够访问有效清单107中未引用但可以经由高速缓存160访问的特定文件。
已经描述了清单107以及高速缓存160的基于值的不变性如何可以引用其内容已被合并的文件(同时保留了文件)中的记录,现在参考图7讨论用于移除该文件的清理方案。清理方案可以确保高速缓存160中的条目被正确地无效,以使得它们不指向已经被移除的文件。然后,参考图8讨论用于高速缓存160的基于位置的不变性的无效方案。
现在转到图7,示出了与高速缓存160的基于值的不变性相关联使用的清理方案的框图。如上所述,高速缓存160可以实现基于值的不变性,其中高速缓存160的条目提供存储特定数据的最新版本的当前或非当前记录310的位置或指示存储特定数据的最新版本的当前或非当前记录310。在所示的实施例中,方案700包括阶段710、720和730以及事件715、724、726、734和736。如图所示,阶段710包括文件115和高速缓存160,高速缓存160包括键157A-C和指针165A-C(指针165B和165C引用文件115)。如进一步所示,阶段720包括文件115、引用文件115的清单107A和具有与阶段710相同的键157和165的高速缓存160。同样如图所示,阶段730包括文件115、清单107B和仅具有键157A和指针165A的高速缓存160。在各种实施例中,作为执行例程204、210、220和230的结果而执行了方案700。在一些实施例中,方案700可以与所示出的方式不同地实现—例如,参考图8讨论的方案800。
在各种实施例中,阶段710表示系统10操作期间的时间点,在该时间点:1)文件115内的所有记录尚未完全合并到新文件中;2)高速缓存160的条目包括指针165B和165C,其指示可能在文件115中找到的不同记录310。因此,在阶段710,实现例程150的线程可以读取高速缓存160,以便在文件115中定位绑定到指针165B和165C的记录。在各种实施例中,从阶段710到阶段720的移动是由事件715的发生引起的。在一些实施例中,事件715代表将文件115中包括的所有记录310合并/复制(例如,合并410或430的执行)到新文件中。
在各种实施例中,阶段720表示系统10操作期间的时间点,在该时间点,文件115中包括的所有记录310已经被完全合并到新文件中—例如,所有那些记录310已经被写入树105的另一级别的新文件105中。在各种实施例中,清单107A是指示文件115存在的最后清单107。当文件115已完全合并时,可以通过高速缓存160(特别是经由指针165B和165C)和通过清单107A(以及较早的任何其他清单107和引用文件115)访问文件115。在各种实施例中,从阶段720到阶段730的移动是由事件724和726的发生引起的。在一些实施例中,事件724表示清单107A的过期-例如,与清单107A相关联的线程已经终止。因此,可能无法通过清单107来访问文件115。在一些实施例中,当不能通过清单107来访问特定文件(例如115、125、135等)时,则没有指向该特定文件的新指针165存储在高速缓存160中(例如,因为作为在使用清单107的树105中查找的副产品,高速缓存160被填充)。因此,在事件724发生之后,在各种实施例中,系统10开始遍历高速缓存160,并使包括指定文件115内的位置的指针165的条目无效。这样,事件726可以表示高速缓存160中的条目被无效。在一些实施例中,条目被无效的速率可以基于与该文件相关联的别名是否需要被回收(例如,别名被回收是否是紧急的)。
在各种实施例中,阶段730表示系统10操作期间的时间点,在该时间点,文件115中包括的所有记录310已经被完全合并,并且高速缓存160中包括指示文件115的指针165的所有条目已被无效。在一些实施例中,清单107B是在高速缓存160中指向文件115的所有条目已经无效之前创建的最后清单107。这样,清单107B可以与已经访问了高速缓存160和检索到的指针165的线程相关联。因此,这样的线程可以在其寿命期间经由检索到的指针165来访问文件115。在一些实施例中,事件734表示清单107B的过期,并且因此与清单107B相关联的线程终止。在一些实施例中,事件736表示文件115的删除(或移除)。也就是说,在各种实施例中,系统10通过等待清单107B过期来确保没有进行中的线程能够读取文件115。因此,在清单107B过期后,系统10可以安全地移除文件115,而不会发生错误,因为存在可以读取文件115的线程。因此,方案700可以用作从数据库100移除文件(例如115、125、135,等等)的机制,同时还确保高速缓存160不包括指向已移除的文件的有效条目。
现在转到图8,示出了在高速缓存160上使用的无效方案的框图。如上所述,高速缓存160可以实现基于位置的不变性,其中高速缓存160的条目提供存储特定数据的最新版本的当前记录310的位置或指示存储特定数据的最新版本的当前记录310。在所示的实施例中,方案800包括合并430之前和之后以及具有键157和对应的指针165的高速缓存160。如合并430之前所示(在合并430上方描绘),文件115A和115B位于级别110中,并且文件125A和125B位于级别120中。如合并430之后所示(在合并430下方描绘),文件115B位于级别110中,并且文件125A和125C-D位于级别120中。尽管示出了合并430,在各种实施例中,执行合并410代替合并430。
如图所示,指针165可以最初指示级别110的文件115A中的特定记录310。在某个时刻,可以执行合并430,其中键范围420包括与特定记录310相关联的键。因此,如图所示,合并430可以导致包括特定记录310的副本的文件125C被创建。在一些实施例中,服务器140响应于该记录被合并到另一级别而使对应于该特定记录310的指针165无效。在一些实施例中,服务器140通过用指向文件125C中包括的特定记录的另一指针165替换该指针165来使该指针165无效。
现在转到图9,示出了方法900的流程图。方法900是由计算机系统(例如,数据库系统10)执行的用于维持可用于定位存储在日志结构的合并树(LSM树)(例如,树105)中的数据(例如,记录310)的高速缓存(例如,高速缓存160)的方法的一个实施例。方法900可以通过执行实现例程204、210、220和230的程序指令来执行。在方法900中,高速缓存160可以实现基于值的变化性(variant)。在各种实施例中,方法900包括附加步骤,诸如将来自外部源的记录(例如,记录310)写入LSM树。
方法900从步骤910开始,其中计算机系统维护LSM树,该LSM树具有多个级别(例如,级别110、120、130等),其可以存储数据库(例如数据库100)的文件(例如,文件115、125、135等)。在各种实施例中,文件包括一个或更多个记录(例如,记录310),每个记录具有键和对应的数据。在各种实施例中,计算机系统维护多个清单(例如,清单107),该清单在特定时间点分别标识LSM树的特定级别中的文件。
在步骤920中,计算机系统维护数据库的高速缓存,该高速缓存的条目为键(例如,键157)存储对应记录在LSM树的文件中的位置的指示(例如,指针165)。该计算机系统可以执行原子存储指令以将指示存储在高速缓存的条目中。在一些实施例中,计算机系统将附加文件存储在LSM树中,该附加文件包括一组键和对应的数据。在存储附加文件之后,计算机系统可使高速缓存中具有在该组键中包括的键的条目无效。
在步骤930中,计算机系统接收访问存储在LSM树中的特定记录的请求。该请求可以指定可用于定位特定记录的第一键。在步骤940,计算机系统经由第一键从高速缓存中检索特定记录的位置的特定指示。在一些实施例中,使用第二键将特定指示存储在高速缓存中。该计算机系统可以通过使用第一键扫描索引结构来确定第二键。在步骤950,计算机系统使用特定指示来访问特定记录。
在各种实施例中,计算机系统将特定文件从LSM树中的第一级复制(例如,合并410或430)到第二级。可以响应于达到第一级的存储阈值来执行复制。在复制之后,在一些实施例中,计算机系统在确定高速缓存中在特定文件内存储位置的指示的条目已被无效并且确定没有读取LSM树的进行中的线程可以访问该特定文件之后,从第一级删除特定文件。由计算机系统维护的多个清单之一可以识别该特定文件。在一些实施例中,在多个清单中没有一个清单识别该特定文件之后,计算机系统使高速缓存中在特定文件内存储位置的指示的条目无效。在确定在特定文件内存储位置的指示的条目已被无效之后,计算机系统可以维护与一个或更多个进行中的线程相关联的特定清单。在某些情况下,该特定清单的过期可指示没有任何读取LSM树的进行中的线程可以访问该特定文件。
现在转到图10,示出了方法1000的流程图。方法1000是由计算机系统(例如,数据库系统10)执行的维护可用于定位存储在数据结构(例如树105)中的数据(例如记录310)的高速缓存(例如,高速缓存160)的方法的一个实施例。方法1000可以通过执行实现例程204、210、220和230的程序指令来执行。在方法1000中,高速缓存160可以实现以上讨论的基于值的变化性。在各种实施例中,方法1000包括附加步骤,例如计算机系统使用原子存储指令来存储高速缓存的条目中的位置的指示(例如,指针165)。
方法1000在步骤1010开始,其中计算机系统维护具有存储数据库(例如,数据库100)的文件(例如,文件115、125、135等)的多个级别(例如,级别110、120、130等)的数据结构。文件可以包括一个或更多个记录(例如,记录310),每个记录包括键和对应的数据。在一些实施例中,计算机系统维护一个或更多个清单(例如,清单107),其为给定级别的数据结构指定给定级别中包括的文件。在一些实施例中,计算机系统维护将别名与文件(例如,文件名)相关联的映射。
在步骤1020中,计算机系统维护数据库的高速缓存,该高速缓存的条目为给定键(例如,键157)存储信息(例如,指针165),该信息定义了数据结构中对应记录所位于的位置。在各种实施例中,计算机系统接收对存储在数据结构内的特定记录的请求。在这样的实施例中,计算机系统可以通过在数据结构中搜索特定记录来确定特定记录存储在数据结构内的位置。这样,响应于确定特定记录存储的位置,计算机系统可以在高速缓存中存储特定信息(例如,指针165),该特定信息定义特定记录在数据结构内存储的位置。在一些实施例中,计算机系统将多个记录从外部存储器写入数据结构。响应于将多个记录写入数据结构,计算机系统可使高速缓存中与键相关联的条目无效,该键和与多个记录相关联的键匹配。
在步骤1030中,计算机系统接收访问存储在数据结构中的特定记录的请求。该请求可以指定可用于定位特定记录的特定键。
在步骤1040中,计算机系统通过特定键从高速缓存中检索特定记录所位于的数据结构中的位置的指示。在一些实施例中,计算机系统在高速缓存的特定条目中存储第一指示,该第一指示定义第一记录在数据结构中的位置。可以基于与第一记录相对应的第一散列键来存储第一指示。在一些实施例中,计算机系统在高速缓存的特定条目中用第二指示覆盖第一指示,该第二指示定义第二记录在数据结构中的位置。可以基于与第二记录相对应的第二散列键来存储第二指示,并且第二散列键可以与第一散列键匹配。因此,计算机系统可以接收对数据结构中的第一记录的请求。计算机系统可以使用在请求中指定的特定键来执行散列导出函数,以导出第一散列键。然后,计算机系统可以基于第一散列键从特定条目中检索定义对应记录的位置的特定指示。在一些实施例中,计算机系统确定特定指示对应于第二指示并且不可用于访问第一记录。在步骤1050,计算机系统使用该指示访问特定记录。
在各种实施例中,计算机系统将一个或更多个记录从数据结构的第一级中的文件写入到数据结构的第二级中的新文件。随后,计算机系统可以在确定高速缓存中存储与该文件相对应的信息的条目已被无效并且确定没有任何读取数据结构的进行中的线程可以访问该文件时,从第一级中删除该文件。
现在转到图11,示出了方法1100的流程图。方法1100是由计算机系统(例如,数据库系统10)执行的方法的一个实施例,该方法用于维护可用于定位存储在日志结构的合并树(LSM树)(例如,树105)中的数据(例如,记录310)的高速缓存(例如,高速缓存160)。方法1100可以通过执行实现例程204、210、220和230的程序指令来执行。在方法1100中,高速缓存160可以实现如上所讨论的基于位置的变化性。在各种实施例中,方法900包括附加步骤,例如计算机系统使用原子存储指令来存储高速缓存的条目中的位置的指示(例如,指针165)。
方法1100在步骤1110开始,其中计算机系统维护具有存储数据库(例如数据库100)的文件(例如,文件115、125、135等)的多个级别(例如,级别110、120、130等)的LSM树。在各种实施例中,文件包括一个或更多个记录(例如,记录310),每个记录具有键和对应的数据。
在步骤1120中,计算机系统维护数据库的高速缓存,该高速缓存的条目为给定键(例如,键157)存储信息(例如,指针165),该信息指定相应记录位于LSM树中的位置。在某些情况下,高速缓存可以包括特定条目,该特定条目存储指定存储在LSM树的第一级的第一文件中包括的特定记录的位置的信息。在各种实施例中,计算机系统将一个或更多个记录从计算机系统的内存中缓冲区写入LSM树。因此,响应于将一个或更多个记录写入LSM树,计算机系统可使高速缓存中与键相关联的条目无效,该键与一个或更多个记录相对应。
在步骤1130中,计算机系统通过将存储在第一文件中的记录复制到包括在LSM树的第二级的第二文件中来执行合并过程(例如,合并410或430)。在某些情况下,记录可以包括上述特定记录。
在步骤1140中,计算机系统使存储在特定条目中的信息无效,该信息指定特定记录在第一级内的位置。在某些实施例中,计算机系统通过更新信息以指定特定记录在第二级内的位置来使该信息无效。
示例性计算机系统
现在转到图12,描绘了可以实现数据库系统10的示例性计算机系统1200的框图。计算机系统1200包括处理器子系统1280,该处理器子系统1280经由互连1260(例如,系统总线)耦合到系统存储器1220和一个或更多个I/O接口1240。一个或更多个I/O接口1240耦合到一个或更多个I/O设备1250。计算机系统1200可以是各种类型的设备中的任何一种,包括但不限于服务器系统,个人计算机系统,台式计算机,膝上型计算机或笔记本计算机,大型机计算机系统,平板计算机,手持计算机,工作站,网络计算机,消费者设备(诸如移动电话,音乐播放器或个人数据助理(PDA))。尽管为了方便起见,在图12中示出了单个计算机系统1200,但是系统1200也可以被实现为一起操作的两个或更多个计算机系统。
处理器子系统1280可以包括一个或更多个处理器或处理单元。在计算机系统1200的各个实施例中,处理器子系统1280的多个实例可以耦合到互连1260。在各种实施例中,处理器子系统1280(或1280内的每个处理器单元)可以包含高速缓存或其他形式的板上存储器。
系统存储器1220是可用的存储程序指令,其可由处理器子系统1280执行以使系统1200执行本文所述的各种操作。系统存储器1220可以使用不同的物理存储器介质来实现,例如硬盘存储器,软盘存储器,可移除磁盘存储器,闪存,随机存取存储器(RAM-SRAM,EDORAM,SDRAM,DDR SDRAM,RAMBUS RAM等),只读存储器(PROM,EEPROM等),等等。计算机系统1200中的存储器不限于主存储器,诸如存储器1220。相反,计算机系统1200还可包括其他形式的存储器,诸如处理器子系统1280中的高速缓存存储器和I/O设备1250上的辅助存储器(例如,硬盘驱动器、存储阵列等)。在一些实施例中,这些其他形式的存储器也可以存储可由处理器子系统1280执行的程序指令。在各种实施例中,上述例程204、210、220和230可以被包括在系统存储器1220内。
根据各种实施例,I/O接口1240可以是被配置为耦合到其他设备并与其他设备通信的各种类型的接口中的任何一种。在一个实施例中,I/O接口1240是从正面总线到一个或更多个背面总线的桥芯片(例如,南桥)。I/O接口1240可以经由一个或更多个对应的总线或其他接口耦合到一个或更多个I/O设备1250。I/O设备1250的示例包括存储设备(硬盘驱动器,光盘驱动器,可移除闪存驱动器,存储阵列,SAN或其关联的控制器),网络接口设备(例如,到局域网或广域网)或其他设备(例如图形、用户界面设备等)。在一个实施例中,计算机系统1200经由网络接口设备1250(例如,被配置为通过WiFi,蓝牙,以太网等进行通信)耦合到网络。
本申请的主题的实现包括但不限于以下示例1至20。
1.一种方法,包括:
由计算机系统维护具有可以存储数据库的文件的多个级别的日志结构的合并树(LSM树),其中所述文件包括一个或更多个记录,每个记录都具有键和对应的数据;
由所述计算机系统维护所述数据库的高速缓存,该高速缓存的条目为键存储对应的记录在所述LSM树的文件中的位置的指示;
由所述计算机系统接收访问存储在所述LSM树中的特定记录的请求,其中所述请求指定可用于定位所述特定记录的第一键;
由所述计算机系统经由所述第一键从所述高速缓存中检索所述特定记录的位置的特定指示;以及
使用所述特定指示,所述计算机系统访问所述特定记录。
2.根据示例1所述的方法,还包括:
由所述计算机系统在所述LSM树中存储附加文件,其中所述附加文件包括一组键和对应的数据;以及
在存储所述附加文件之后,所述计算机系统使所述高速缓存中具有包括在所述一组键中的键的条目无效。
3.根据示例1所述的方法,还包括:
由所述计算机系统将特定文件从所述LSM树中的第一级复制到第二级,其中所述复制是响应于达到所述第一级的存储阈值而执行的;
在所述复制之后,所述计算机系统在以下情况下从所述第一级删除所述特定文件:
确定所述高速缓存中存储所述特定文件中的位置的指示的条目已被无效;并且
确定没有读取所述LSM树的进行中的线程可以访问所述特定文件。
4.根据示例3所述的方法,还包括:
由所述计算机系统维护多个清单,其中所述多个清单之一在特定时间点标识包括在所述LSM树的特定级别中的文件,其中所述多个清单之一标识所述特定文件;以及
在所述多个清单中没有清单识别所述特定文件之后,所述计算机系统使所述高速缓存中存储所述特定文件中的位置的指示的条目无效。
5.根据示例4所述的方法,其中确定没有读取所述LSM树的进行中的线程可以访问所述特定文件包括:
在确定存储所述特定文件中的位置的指示的条目已经被无效之后,所述计算机系统维护与一个或更多个进行中的线程相关联的特定清单;以及
响应于所述特定清单过期,所述计算机系统删除所述特定文件,其中所述特定清单过期指示没有读取所述LSM树的进行中的线程可以访问所述特定文件。
6.根据示例1所述的方法,其中,使用原子存储指令将位置的指示存储在所述高速缓存的条目中。
7.根据示例1所述的方法,其中,检索所述特定指示包括:
由所述计算机系统通过使用所述第一键扫描索引结构来确定第二键,其中使用所述第二键将所述特定指示存储在所述高速缓存中。
8.一种具有存储在其上的程序指令的非暂时性计算机可读介质,该程序指令能够使数据库系统执行以下操作:
维护具有存储数据库的文件的多个级别的数据结构,其中所述文件包括一个或更多个记录,每个记录包括键和对应的数据;
维护所述数据库的高速缓存,所述高速缓存的条目为给定键存储信息,所述信息定义相应记录所位于的所述数据结构中的位置;
接收访问存储在所述数据结构中的特定记录的请求,其中,所述请求指定可用于定位所述特定记录的特定键;
经由所述特定键从所述高速缓存中检索所述特定记录所位于的数据结构中的位置的指示;以及
使用所述指示访问所述特定记录。
9.根据示例8所述的非暂时性计算机可读介质,其中,所述操作还包括:
接收对存储在所述数据结构中的附加记录的请求;
响应于确定所述高速缓存并未存储所述附加记录的位置的指示:
通过在所述数据结构中搜索所述特定记录来确定所述特定记录存储在所述数据结构中的何处;以及
响应于确定所述特定记录存储在何处,将指示存储在所述高速缓存中,其指示所述特定记录存储在所述数据结构内的在何处。
10.根据示例8所述的非暂时性计算机可读介质,其中,所述操作还包括:
从外部存储器向所述数据结构写入多个记录;以及
响应于向所述数据结构写入所述多个记录,使所述高速缓存中与键相关联的条目无效,所述键和与所述多个记录相关联的键匹配。
11.根据示例8所述的非暂时性计算机可读介质,其中,所述操作还包括:
将一个或更多个记录从所述数据结构的第一级的文件写入到所述数据结构的第二级的新文件;
所述写入之后,在以下情况下从所述第一级删除所述文件:
确定所述高速缓存中存储与所述文件相对应的信息的条目已被无效;并且
确定没有读取所述数据结构的进行中的线程可以访问所述文件。
12.根据示例11所述的非暂时性计算机可读介质,其中,所述操作还包括:
维护一个或更多个清单,所述清单为所述数据结构中的给定级别指定该给定级别中包括的文件;
确定所述一个或更多个清单是否指定所述文件包含在第一级中;以及
响应于确定所述一个或更多个清单并未指定所述文件包括在所述第一级中,使所述高速缓存中与所述文件相对应的条目无效。
13.根据示例8所述的非暂时性计算机可读介质,其中,所述操作还包括:
将定义所述第一记录在所述数据结构中的位置的第一指示存储在所述高速缓存的特定条目中,其中,所述第一指示是基于与所述第一记录相对应的第一散列键来存储的;以及
在所述高速缓存的所述特定条目中,用定义所述第二记录在所述数据结构中的位置的第二指示来覆盖所述第一指示,其中,基于与所述第二记录相对应的第二散列键来存储所述第二指示,其中所述第二散列键与第一散列键匹配。
14.根据示例13所述的非暂时性计算机可读介质,其中,所述操作还包括:
接收对所述数据结构中的所述第一记录的请求,其中,所述请求包括与所述第一记录相关联的某键;
使用所述某键执行散列推导函数以推导出所述第一散列键;
基于所述第一散列键从所述特定条目中检索定义相应记录的位置的特定指示;以及
确定所述特定指示对应于所述第二指示并且不可用于访问所述第一记录。
15.一种方法,包括:
由计算机系统维护具有存储数据库的文件的多个级别的日志结构的合并树(LSM树),其中所述文件包括一个或更多个记录,每个记录都具有键和对应的数据;
由所述计算机系统维护数据库的高速缓存,高速缓存的条目为给定键存储指定相应记录所位于的所述LSM树中的位置的信息,其中所述高速缓存包括存储信息的特定条目,所述信息指定所述LSM树的第一级中存储的第一文件中包括的特定记录的位置;
由所述计算机系统通过将存储在所述第一文件中的记录复制到包括在所述LSM树的第二级中的第二文件中来执行合并过程,其中所述记录包括所述特定记录;以及
由所述计算机系统使存储在所述特定条目中的信息无效,该信息指定所述特定记录在所述第一级中的位置。
16.根据示例15所述的方法,其中,所述无效包括:
由所述计算机系统更新存储在所述特定条目中的所述信息,以指定所述特定记录在所述第二级中的位置。
17.根据示例15所述的方法,还包括:
由所述计算机系统将一个或更多个记录从所述计算机系统的内存中缓冲区写入所述LSM树;以及
响应于将所述一个或更多个记录写入所述LSM树,所述计算机系统使所述高速缓存中与对应于所述一个或更多个记录的键相关联的条目无效。
18.根据示例15所述的方法,还包括:
在所述特定条目存储指定所述特定记录在所述第一级中的所述位置的信息之前,所述计算机系统接收对所述特定记录的请求;以及
在接收到所述请求后,所述计算机系统将所述特定记录定位在所述第一级中;以及
响应于将所述特定记录定位在所述第一级中,所述计算机系统存储指定所述特定记录在所述第一级中的所述位置的所述信息。
19.根据示例15所述的方法,其中,通过对与其位置被存储在所述条目中的记录相对应的键执行散列推导函数来推导对应于条目的给定键。
20.根据示例19所述的方法,其中,所述LSM树中的所述特定记录和不同记录与相同的散列键相关联,并且所述方法还包括:
由所述计算机系统接收对所述特定记录的请求;
由所述计算机系统基于与所述特定记录相关联的散列键从所述高速缓存中检索信息;
由所述计算机系统确定所述信息是指定所述特定记录的位置还是所述不同记录的位置;以及
响应于确定所述信息指定所述特定记录的位置,所述计算机系统基于所述信息返回所述特定记录。
尽管以上已经描述了特定实施例,但是即使在关于特定特征仅描述单个实施例的情况下,这些实施例也不旨在限制本公开的范围。除非另有说明,否则本公开中提供的特征的示例旨在是说明性的而非限制性的。上面的描述旨在涵盖受益于本公开的对本领域技术人员来说显而易见的这种替代、修改和等同形式。
本公开的范围包括本文公开的任何特征或特征的组合(明确地或隐含地)或其任何概括,无论其是否减轻了本文所解决的任何或所有问题。因此,可以在本申请(或要求其优先权的申请)对特征的任何这种组合的过程中提出新的权利要求。特别地,参考所附权利要求,可以将从属权利要求的特征与独立权利要求的特征相结合,并且可以以任何适当的方式而不是仅以所附权利要求中列举的特定组合的方式将各个独立权利要求的特征相结合。
Claims (20)
1.一种方法,包括:
由计算机系统维护具有能够存储数据库的文件的多个级别的日志结构的合并树(LSM树),其中所述文件包括一个或更多个记录,每个记录都具有键和对应的数据;
由所述计算机系统维护用于所述数据库的高速缓存,所述高速缓存的条目为键存储相应记录在所述LSM树的文件中的位置的指示;
由所述计算机系统接收访问存储在所述LSM树中的特定记录的请求,其中所述请求指定能够用于定位所述特定记录的第一键;
由所述计算机系统经由所述第一键从所述高速缓存中检索所述特定记录的位置的特定指示;以及
使用所述特定指示,所述计算机系统访问所述特定记录。
2.根据权利要求1所述的方法,还包括:
由所述计算机系统将附加文件存储在所述LSM树中,其中所述附加文件包括键集合和对应的数据;以及
在存储所述附加文件之后,所述计算机系统使所述高速缓存中具有包括在所述键集合中的键的条目无效。
3.根据权利要求1或2所述的方法,还包括:
由所述计算机系统将特定文件从所述LSM树中的第一级复制到第二级,其中所述复制是响应于达到所述第一级的存储阈值而执行的;
在所述复制之后,所述计算机系统在以下情况下从所述第一级删除所述特定文件:
确定所述高速缓存中存储所述特定文件中的位置的指示的条目已被无效;并且
确定没有读取所述LSM树的进行中的线程能够访问所述特定文件。
4.根据权利要求3所述的方法,还包括:
由所述计算机系统维护多个清单,其中所述多个清单中的清单在特定时间点标识包括在所述LSM树的特定级别中的文件,其中所述多个清单之一标识所述特定文件;以及
在所述多个清单中无一识别所述特定文件之后,所述计算机系统使所述高速缓存中存储所述特定文件中的位置的指示的条目无效。
5.根据权利要求4所述的方法,其中确定没有读取所述LSM树的进行中的线程能够访问所述特定文件包括:
在确定存储所述特定文件中的位置的指示的条目已被无效之后,所述计算机系统维护与一个或更多个进行中的线程相关联的特定清单;以及
响应于所述特定清单过期,所述计算机系统删除所述特定文件,其中所述特定清单过期指示没有读取所述LSM树的进行中的线程能够访问所述特定文件。
6.根据权利要求1-5中任一项所述的方法,其中,使用原子存储指令将位置的指示存储在所述高速缓存的条目中。
7.根据权利要求1-6中任一项所述的方法,其中,检索所述特定指示包括:
由所述计算机系统通过使用所述第一键扫描索引结构来确定第二键,其中所述特定指示使用所述第二键存储在所述高速缓存中。
8.一种具有存储在其上的程序指令的非暂时性计算机可读介质,该程序指令能够使数据库系统执行以下操作:
维护具有存储数据库的文件的多个级别的LSM树,其中所述文件包括一个或更多个记录,每个记录包括键和对应的数据;
维护用于所述数据库的高速缓存,所述高速缓存的条目为给定键存储信息,所述信息定义相应记录所位于的所述LSM树中的位置;
接收访问存储在所述LSM树中的特定记录的请求,其中所述请求指定能够用于定位所述特定记录的特定键;
经由所述特定键从所述高速缓存中检索所述特定记录所位于的所述LSM树中的位置的指示;以及
使用所述指示访问所述特定记录。
9.根据权利要求8所述的非暂时性计算机可读介质,其中,所述操作还包括:
接收对存储在所述LSM树中的附加记录的请求;
响应于确定所述高速缓存未存储所述附加记录的位置的指示:
通过在所述LSM树中搜索所述特定记录来确定所述特定记录存储在所述LSM树中的何处;以及
响应于确定所述特定记录存储在何处,将指示所述特定记录存储在所述LSM树中的何处的指示存储在所述高速缓存中。
10.根据权利要求8或9所述的非暂时性计算机可读介质,其中,所述操作还包括:
从外部存储器向所述LSM树写入多个记录;以及
响应于向所述LSM树写入所述多个记录,使所述高速缓存中与键相关联的条目无效,所述键和与所述多个记录相关联的键匹配。
11.根据权利要求8-10中任一项所述的非暂时性计算机可读介质,其中,所述操作还包括:
将来自所述LSM树的第一级中的文件的一个或更多个记录写入到所述LSM树的第二级中的新文件;
在所述写入之后,在以下情况下从所述第一级删除所述文件:
确定所述高速缓存中存储与所述文件相对应的信息的条目已被无效;并且
确定没有读取所述LSM树的进行中的线程能够访问所述文件。
12.根据权利要求11所述的非暂时性计算机可读介质,其中,所述操作还包括:
维护一个或更多个清单,所述清单为所述LSM树中的给定级别指定该给定级别中包括的文件;
确定所述一个或更多个清单是否指定所述文件包括在第一级中;以及
响应于确定所述一个或更多个清单并未指定所述文件包括在所述第一级中,使所述高速缓存中与所述文件相对应的条目无效。
13.根据权利要求8-12中任一项所述的非暂时性计算机可读介质,其中,所述操作还包括:
将定义第一记录在所述LSM树中的位置的第一指示存储在所述高速缓存的特定条目中,其中,所述第一指示基于与所述第一记录相对应的第一散列键来存储;以及
在所述高速缓存的所述特定条目中,用定义第二记录在所述LSM树中的位置的第二指示来覆盖所述第一指示,其中所述第二指示基于与所述第二记录相对应的第二散列键来存储,其中所述第二散列键与所述第一散列键匹配。
14.根据权利要求13所述的非暂时性计算机可读介质,其中所述操作还包括:
接收对所述LSM树中的所述第一记录的请求,其中所述请求包括与所述第一记录相关联的某键;
使用所述某键执行散列推导函数以推导出所述第一散列键;
基于所述第一散列键从所述特定条目中检索定义相应记录的位置的特定指示;以及
确定所述特定指示对应于所述第二指示并且不能用于访问所述第一记录。
15.一种系统,包括:
一个或更多个处理器;以及
存储器,其上存储有程序指令,该程序指令能够由所述一个或更多个处理器执行以使所述系统执行以下操作:
维护具有存储数据库的文件的多个级别的日志结构的合并树
(LSM树),其中所述文件包括一个或更多个记录,每个记录包括键和对应的数据;
维护用于所述数据库的高速缓存,所述高速缓存的条目为给定键存储信息,所述信息指定相应记录所位于的所述LSM树中的位置;
接收访问存储在所述LSM树中的特定记录的请求,其中所述请求指定能够用于定位所述特定记录的特定键;
经由所述特定键从所述高速缓存中检索所述特定记录所位于的所述LSM树中的位置的指示;以及
使用所述指示访问所述特定记录。
16.根据权利要求15所述的系统,其中,所述特定记录被包括在存储在所述LSM树的第一级中的第一文件中,并且其中所述操作还包括:
通过将存储在所述第一文件中的记录复制到包括在所述LSM树的第二级中的第二文件中来执行合并过程,其中所述记录包括所述特定记录;以及
使指定所述特定记录在所述第一级中的位置的所述信息无效。
17.根据权利要求16所述的系统,其中所述无效包括:
更新所述信息以指定所述特定记录在所述第二级中的位置。
18.根据权利要求15-17中任一项所述的系统,其中所述操作还包括:
将来自所述系统的内存中缓冲区的一个或更多个记录写入所述LSM树;以及
响应于将所述一个或更多个记录写入所述LSM树,使所述高速缓存中与对应于所述一个或更多个记录的键相关联的条目无效。
19.根据权利要求15-18中任一项所述的系统,其中,通过对与其位置被存储在条目中的记录相对应的键执行散列推导函数来推导与所述条目相对应的所述给定键。
20.根据权利要求19所述的系统,其中,所述LSM树中的所述特定记录和不同记录与相同的散列键相关联,并且其中所述操作还包括:
确定所述信息是指定所述特定记录的位置还是所述不同记录的位置;以及
响应于确定所述信息指定所述特定记录的位置,返回所述特定记录。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/884,131 US10691693B2 (en) | 2018-01-30 | 2018-01-30 | Cache for efficient record lookups in an LSM data structure |
US15/884,131 | 2018-01-30 | ||
PCT/US2019/015575 WO2019152371A1 (en) | 2018-01-30 | 2019-01-29 | Cache for efficient record lookups in an lsm data structure |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111656341A true CN111656341A (zh) | 2020-09-11 |
CN111656341B CN111656341B (zh) | 2023-11-28 |
Family
ID=65409597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980010105.6A Active CN111656341B (zh) | 2018-01-30 | 2019-01-29 | 用于lsm数据结构中有效记录查找的高速缓存 |
Country Status (5)
Country | Link |
---|---|
US (3) | US10691693B2 (zh) |
EP (1) | EP3746906B1 (zh) |
JP (1) | JP7220234B6 (zh) |
CN (1) | CN111656341B (zh) |
WO (1) | WO2019152371A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11061881B2 (en) * | 2018-11-08 | 2021-07-13 | Vmware, Inc. | Bounding cost of flushes in buffer trees |
US11093472B2 (en) * | 2018-12-07 | 2021-08-17 | Vmware, Inc. | Using an LSM tree file structure for the on-disk format of an object storage platform |
US11237744B2 (en) * | 2018-12-28 | 2022-02-01 | Verizon Media Inc. | Method and system for configuring a write amplification factor of a storage engine based on a compaction value associated with a data file |
US11475017B2 (en) * | 2019-03-05 | 2022-10-18 | Microsoft Technology Licensing, Llc | Asynchronous data enrichment for an append-only data store |
CN110032565A (zh) * | 2019-03-26 | 2019-07-19 | 阿里巴巴集团控股有限公司 | 一种生成统计信息的方法、系统以及电子设备 |
KR102195838B1 (ko) * | 2019-04-10 | 2020-12-28 | 주식회사 티맥스 소프트 | 데이터 베이스 관리 방법 |
US11321294B2 (en) | 2019-09-09 | 2022-05-03 | Salesforce.Com, Inc. | Database index repair |
WO2021061173A1 (en) * | 2019-12-04 | 2021-04-01 | Futurewei Technologies, Inc. | Data integrity validation on lsm tree snapshots |
KR20210077467A (ko) * | 2019-12-17 | 2021-06-25 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것을 포함하는 데이터 처리 시스템 |
US11526474B2 (en) | 2020-01-30 | 2022-12-13 | Salesforce.Com, Inc. | Reducing requests using probabilistic data structures |
US11514015B2 (en) | 2020-01-30 | 2022-11-29 | Salesforce.Com, Inc. | Reducing requests using probabilistic data structures |
US11308030B2 (en) * | 2020-03-05 | 2022-04-19 | International Business Machines Corporation | Log-structured merge-tree with blockchain properties |
US11483150B2 (en) | 2020-06-01 | 2022-10-25 | Salesforce.Com, Inc. | Private key cache in secure enclave |
US11681705B2 (en) * | 2020-07-01 | 2023-06-20 | Salesforce, Inc. | Trie data structure with subtrie data structures |
US11537569B2 (en) * | 2020-09-01 | 2022-12-27 | Salesforce.Com, Inc. | Merges using key range data structures |
KR102389609B1 (ko) * | 2020-09-25 | 2022-04-21 | 연세대학교 산학협력단 | 쓰기 최적화 데이터베이스에서의 디스크 스캔 연산 gpu 오프로딩 방법 |
CN112286948B (zh) * | 2020-11-18 | 2023-05-23 | 成都佳华物链云科技有限公司 | 时序数据库的数据存储方法、读取方法及装置 |
US11816067B2 (en) | 2020-11-20 | 2023-11-14 | Red Hat, Inc. | Prefetching data from a data storage system |
US12013831B2 (en) | 2021-01-29 | 2024-06-18 | Salesforce, Inc. | Index for multi-level data structures |
US11741050B2 (en) * | 2021-01-29 | 2023-08-29 | Salesforce, Inc. | Cloud storage class-based variable cache availability |
CN113032457B (zh) * | 2021-03-19 | 2022-12-02 | 山东英信计算机技术有限公司 | 一种物料清单的数据库信息维护方法和装置 |
US20220374540A1 (en) * | 2021-05-20 | 2022-11-24 | Salesforce.Com, Inc. | Field level encryption searchable database system |
US12019610B2 (en) * | 2021-08-27 | 2024-06-25 | Salesforce, Inc. | Mechanisms for truncating tenant data |
KR102512571B1 (ko) * | 2021-12-06 | 2023-03-22 | 성균관대학교산학협력단 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
US20230385158A1 (en) * | 2022-01-19 | 2023-11-30 | Pliops Ltd. | Performing a backup in relation to a separated database |
US11695852B1 (en) * | 2022-01-26 | 2023-07-04 | Dell Products L.P. | Managing overlapping communications between downtiering and invalidating cached data among nodes in a storage system |
US11971859B2 (en) | 2022-04-28 | 2024-04-30 | Netapp, Inc. | Defragmentation for log structured merge tree to improve read and write amplification |
US20230350810A1 (en) * | 2022-04-28 | 2023-11-02 | Netapp Inc. | In-memory hash entries and hashes used to improve key search operations for keys of a key value store |
US20230376476A1 (en) * | 2022-05-20 | 2023-11-23 | Cockroach Labs, Inc. | Systems and methods for admission control input/output |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100306222A1 (en) * | 2009-05-29 | 2010-12-02 | Microsoft Corporation | Cache-friendly b-tree accelerator |
US20120072656A1 (en) * | 2010-06-11 | 2012-03-22 | Shrikar Archak | Multi-tier caching |
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
CN104123235A (zh) * | 2013-04-26 | 2014-10-29 | 国际商业机器公司 | 访问存储在服务器上高速缓存中的数据记录的设备和方法 |
US9069792B1 (en) * | 2008-08-22 | 2015-06-30 | Conifer Systems LLC | Method and system for persistently cached, copy-on-write view of revision control trees |
US20170249257A1 (en) * | 2016-02-29 | 2017-08-31 | Itu Business Development A/S | Solid-state storage device flash translation layer |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9400816B1 (en) * | 2013-02-28 | 2016-07-26 | Google Inc. | System for indexing collections of structured objects that provides strong multiversioning semantics |
US9218383B2 (en) * | 2013-03-15 | 2015-12-22 | International Business Machines Corporation | Differentiated secondary index maintenance in log structured NoSQL data stores |
US10592348B2 (en) * | 2016-06-17 | 2020-03-17 | Acronis International Gmbh | System and method for data deduplication using log-structured merge trees |
US10725988B2 (en) * | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US20190034427A1 (en) * | 2017-12-28 | 2019-01-31 | Intel Corporation | Data management system employing a hash-based and tree-based key-value data structure |
-
2018
- 2018-01-30 US US15/884,131 patent/US10691693B2/en active Active
-
2019
- 2019-01-29 JP JP2020562087A patent/JP7220234B6/ja active Active
- 2019-01-29 EP EP19705023.0A patent/EP3746906B1/en active Active
- 2019-01-29 WO PCT/US2019/015575 patent/WO2019152371A1/en unknown
- 2019-01-29 CN CN201980010105.6A patent/CN111656341B/zh active Active
-
2020
- 2020-06-22 US US16/908,006 patent/US11269885B2/en active Active
-
2022
- 2022-03-07 US US17/653,820 patent/US11775524B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9069792B1 (en) * | 2008-08-22 | 2015-06-30 | Conifer Systems LLC | Method and system for persistently cached, copy-on-write view of revision control trees |
US20100306222A1 (en) * | 2009-05-29 | 2010-12-02 | Microsoft Corporation | Cache-friendly b-tree accelerator |
US20120072656A1 (en) * | 2010-06-11 | 2012-03-22 | Shrikar Archak | Multi-tier caching |
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
US20140325011A1 (en) * | 2012-11-21 | 2014-10-30 | International Business Machines Corporation | Rdma-optimized high-performance distributed cache |
CN104123235A (zh) * | 2013-04-26 | 2014-10-29 | 国际商业机器公司 | 访问存储在服务器上高速缓存中的数据记录的设备和方法 |
US20170249257A1 (en) * | 2016-02-29 | 2017-08-31 | Itu Business Development A/S | Solid-state storage device flash translation layer |
Also Published As
Publication number | Publication date |
---|---|
JP2021513176A (ja) | 2021-05-20 |
US10691693B2 (en) | 2020-06-23 |
EP3746906A1 (en) | 2020-12-09 |
US11775524B2 (en) | 2023-10-03 |
JP7220234B2 (ja) | 2023-02-09 |
WO2019152371A1 (en) | 2019-08-08 |
US20190236156A1 (en) | 2019-08-01 |
US20220188317A1 (en) | 2022-06-16 |
CN111656341B (zh) | 2023-11-28 |
US11269885B2 (en) | 2022-03-08 |
JP7220234B6 (ja) | 2023-02-28 |
US20200320081A1 (en) | 2020-10-08 |
EP3746906B1 (en) | 2023-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111656341B (zh) | 用于lsm数据结构中有效记录查找的高速缓存 | |
US10564850B1 (en) | Managing known data patterns for deduplication | |
CN110073344B (zh) | 利用合成基线快照和逐出状态刷新来减少稳定数据逐出 | |
US7805470B2 (en) | Methods and apparatus for managing the storage of content in a file system | |
US9311014B2 (en) | Storage system and methods of mapping addresses of snapshot families | |
US8868624B2 (en) | Blob manipulation in an integrated structured storage system | |
US8620884B2 (en) | Scalable blob storage integrated with scalable structured storage | |
US6957362B2 (en) | Instantaneous restoration of a production copy from a snapshot copy in a data storage system | |
US8484172B2 (en) | Efficient search for migration and purge candidates | |
US7376674B2 (en) | Storage of multiple pre-modification short duration copies of database information in short term memory | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
CN110998557A (zh) | 通过分布式存储器的高可用性数据库 | |
US20040030846A1 (en) | Data storage system having meta bit maps for indicating whether data blocks are invalid in snapshot copies | |
US8819074B2 (en) | Replacement policy for resource container | |
US20060294163A1 (en) | Methods and apparatus for accessing content stored in a file system | |
EP2336901B1 (en) | Online access to database snapshots | |
US20060294115A1 (en) | Methods and apparatus for storing content in a file system | |
US10394764B2 (en) | Region-integrated data deduplication implementing a multi-lifetime duplicate finder | |
CN109002400B (zh) | 一种内容感知型计算机缓存管理系统及方法 | |
US20100228787A1 (en) | Online data volume deletion | |
EP1894127B1 (en) | Methods and apparatus for managing the storage of content in a file system | |
CN118502670A (zh) | 一种基于聚合的键值存储方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40036023 Country of ref document: HK |
|
CB02 | Change of applicant information |
Address after: California, USA Applicant after: Shuo Power Co. Address before: California, USA Applicant before: SALESFORCE.COM, Inc. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |