具有子字典树数据结构的字典树数据结构
文献发布时间:2023-06-19 19:07:35
背景技术
技术领域
公开文本总体上涉及数据库系统,更具体地,涉及能够存储指示数据库键码的信息的树形数据结构。
相关技术的描述
现代数据库系统通常实现使用户能够以有组织的方式存储能被有效访问和操纵的信息集合的管理系统。在一些情况下,这些管理系统对具有多个层级的日志结构合并树(LSM树)进行维护,每个层级将数据库记录中的信息存储为键值对。LSM树通常包括两种高层级组件:内存缓冲区和持久性存储。在操作中,数据库系统首先将数据库记录写入到内存缓冲区,然后将它们刷新到持久性存储。作为刷新数据库记录的一部分,数据库系统将数据库记录写入到存储在持久性存储上的新文件。
附图说明
图1是示出根据一些实施方案的能够使用字典树数据结构(trie datastructure)集合的系统的示例性元素的框图。
图2是示出根据一些实施方案的具有子字典树数据结构集合的字典树数据结构的示例性元素的框图。
图3是示出根据一些实施方案的字典树数据结构的节点的指针信息的示例性元素的框图。
图4是示出根据一些实施方案的由数据库应用程序创建和更新字典树的示例性元素的框图。
图5至图6是示出根据一些实施方案的与使用字典树数据结构有关的示例性方法的流程图。
图7是示出根据一些实施方案的示例性计算机系统的框图。
公开文本包括对“一个实施方案”或“实施方案”的引用。短语“在一个实施方案中”或“在实施方案中”的出现不一定指同一个实施方案。特定的特征、结构或特性可以以与公开文本一致的任何合适的方式组合。
在公开文本中,不同的实体(可以不同地称为“单元”、“电路”、其他组件等)可以被描述或称为“被配置”为执行一个或多个任务或操作。该表述——[实体]被配置为[执行一个或多个任务]——在此用于指结构(即,物理上的事物,例如电子电路)。更具体地,该表述用于表示该结构被布置为在操作期间执行一个或多个任务。即使结构当前未被操作,也可以说,结构被“配置为”执行某些任务。“被配置为通过网络进行通信的网络接口”旨在涵盖例如具有在操作期间执行该功能的电路的集成电路,即使所讨论的集成电路当前未被使用(例如,电源未连接到该集成电路)。因此,被描述或叙述为“被配置为”执行某一任务的实体是指物理上的事物,例如设备、电路、存储可执行以实现该任务的程序指令的存储器等。因此,“被配置为”表述在此不用于指软件实体诸如应用编程接口(API)。
术语“被配置为”并不意味着“可配置为”。例如,未编程的FPGA不会被认为是“被配置为”进行一些特定功能,尽管它可以是“可配置为”进行该功能,并且可以“被配置为”在编程之后执行该功能。
如本文所使用的,术语“第一”、“第二”等用作它们前面的名词的标签,并不隐含任何类型的排序(例如,空间、时间、逻辑等),除非特别说明。例如,在具有八个处理核的处理器中,术语“第一”和“第二”处理核可用于指代八个处理核中的任何两个。换言之,例如,第一处理核和第二处理核不限于处理核0和1。
如本文所使用的,术语“基于”用于描述影响确定的一个或多个因素。这个术语不排除可能影响确定的其他因素。即,确定可以仅基于指定因素或基于指定因素以及其他未指定的因素。设想措辞“基于B确定A”。该措辞指定了B是用于确定A或影响A的确定的因素。该措辞并不排除A的确定还可以基于一些其他因素,例如C。该措辞还旨在涵盖仅基于B来确定A的实施方案。如本文所使用的,措辞“基于”因此与措辞“至少部分地基于”同义。
如本文所用,“模块”是指可操作以执行指定的操作集合的软件和/或硬件。模块可以指可由计算机系统执行以执行操作集合的软件指令的集合。模块还可以指被配置为执行操作集合的硬件。硬件模块可以构成通用硬件以及存储程序指令的非暂时性计算机可读介质,或者专用硬件诸如定制的ASIC。因此,被描述为“可执行”以执行操作的模块是指软件模块,而被描述为“被配置”为执行操作的模块是指硬件模块。被描述为“可操作”以执行操作的模块指的是软件模块和硬件模块两者。
具体实施方式
在围绕LSM树而构建的数据库的操作期间,数据库系统通常将数据库记录从内存缓冲区刷新到存储在持久性存储上的文件。文件通常包括与各种不同数据库键码值相对应的多个数据库记录。在操作中,数据库系统处理事务请求,事务请求可以涉及针对那些事务请求中所指定的数据库键码而从持久性存储的文件访问数据库记录。作为处理事务请求的一部分,在一些情况下,数据库系统进行单一数据库记录查找,其中数据库系统从持久性存储中检索文件并针对与事务请求中标识的特定数据库键码相对应的数据库记录而对它们进行检查。但在许多情况下,数据库系统检索的文件不包含与特定数据库键码相对应的数据库记录。因此,数据库系统浪费了时间和资源从持久性存储中提取那些文件。
在一些情况下,概率型数据结构诸如布隆过滤器可用于减少从持久性存储提取文件的数量,因为它们经常针对数据库键码而提供相应数据库记录可能存在于文件中或肯定不存在于该文件中的指示。因此,数据库系统可以仅提取(fetch)其中可能存在相应数据库记录的那些文件,而跳过其中不存在相应数据库记录的那些文件。但在一些情况下,作为处理事务请求的一部分,数据库系统执行键码范围查找,其中数据库系统针对其数据库键码落在指定键码范围内的数据库记录进行搜索。被称为“字典树”(可替换地,“字典树数据结构”)的特定类型的概率型数据结构可以在键码范围查找中使用,以便减少从持久性存储提取文件的数量。字典树还可以用于确定特定数据库节点在其内存缓冲区中是否包括数据库键码落在指定键码范围内的数据库记录。如本文所使用的,术语“字典树”是根据其已建立的含义来使用的,并且是指其分支由与字符值相对应的链接节点构成的树形数据结构。因此,字典树的分支可以表示数据库键码,其中该分支的各个节点与数据库键码的各个字符相对应。
虽然字典树在键码范围查找方面提供优于其他概率型数据结构(例如布隆过滤器)的优点,但目前字典树的实现存在缺点。一个缺点涉及将字典树存储在系统存储器然后将其从系统存储器提取入系统缓存的方式。目前,这些实现在遍历字典树的分支时导致相对较多次数的存储器提取。特别地,目前的实现将字典树存储在系统存储器中,使得给定层级的所有节点在存储器中位于字典树中下一个层级的所有节点之前。因此,作为分支遍历的一部分,从一个层级向下遍历到下一个层级可能涉及在系统存储器中移动合理的存储距离。设想其中计算机系统从某个字典树的第27层级遍历到第28层级的实例。由于第27层级可能包括大量节点以及有限的缓存大小,当计算机系统发出针对第27层级将数据从系统存储器提取入缓存的存储器请求时,从系统存储器返回的数据很可能不包括针对第28层级的节点的数据。即,从系统存储器提取以存储在系统缓存中的序列数据块可能仅包括表示第27层级的节点的一部分的数据,而不包括表示第28层级的节点的数据。因此,当从字典树的第27层级向下遍历到第28层级时,计算机系统将不得不发出另一个存储器请求以针对第28层级而提取数据。上述将字典树存储在系统存储器中的方式导致系统必须对正在下延的分支的每个节点发出一个存储器请求。因此,下延分支(其通常是数据结构的多个层级)涉及大量的存储器请求,这些请求加在一起可能需要过多的时间来处理。
公开文本内容描述了用于实现字典树数据结构的技术,其克服了其他字典树方法的一些或全部缺点。在下文描述的各种实施方案中,计算机系统对分别包含子字典树的集合的字典树数据结构进行维护,每个子字典树数据结构具有链接节点集合。在各种情况下,第一子字典树可以与作为字典树数据结构的特定分支的一部分的第二子字典树数据结构连接。在各种实施方案中,将第一子字典树数据结构在系统存储器中存储为信息的连续块,信息的连续块包括详述第一子字典树数据结构节点的节点信息以及对系统存储器中存储第二子字典树数据结构的信息的位置进行标识的指针信息。计算机系统可以使用第一子字典树数据结构中包括的指针信息将第二子字典树数据结构加载到计算机系统的系统缓存。在各种情况下,第二子字典树数据结构和其他子字典树数据结构可以涵盖字典树数据结构中相同特定层级范围内的节点。在各种实施方案中,计算机系统在没有访问一个或多个其他子字典树数据结构的情况下加载第二子字典树数据结构,一个或多个其他子字典树数据结构涵盖与第二子字典树数据结构相同的特定层级范围的一个或者多个层级内的节点。
设想前面的实例,其中计算机系统向下遍历特定分支的第27层级和第28层级。例如,由公开文本内容所讨论的技术而实现的字典树数据结构可以包括第一子字典树数据结构以及第二子字典树数据结构,第一子字典树数据结构包括第26层级的节点(其中之一可以与特定分支相对应),第二子字典树数据结构包括从第27层级到第34层级的特定分支的节点。第二子字典树数据结构可以全部存储在系统缓存中,同时包括从第27层级到第34层级的节点,因为第二子字典树数据结构不是必须包括这些层级中的所有节点。结果,当计算机系统使用第一子字典树数据结构中包括的指针信息将第二子字典树数据结构提取入系统缓存时,计算机系统可以在不必发出另一个存储器请求的情况下从特定分支的第27层级遍历到第34层级。因此,这些技术可以优于现有的方法,因为这些技术允许计算机系统在遍历字典树数据结构的分支时发出较少的存储器请求。即,当特定层级的节点中的许多节点与字典树特定分支的遍历不相关时,现有的方法浪费缓存空间来提取这些节点中的大多数或全部。现在将参照图1开始讨论这些技术的示例性应用。
现在转到图1,示出了系统100的框图。系统100包括可以通过硬件或者硬件和软件例程的组合而实现的组件的集合。在所示实施方案中,系统100包括数据库110以及数据库节点130,数据库节点包括计算综合装置140和系统存储器150。如进一步所示的,数据库110包括文件115和字典树120,而计算综合装置140执行程序指令的集合以实现数据库应用程序146并包括系统缓存144。在一些实施方案中,系统100以与所示方式不同的方式来实现。例如,系统100可以包括多个彼此交互并与数据库110交互的数据库节点130。
在各种实施方案中,系统100实现平台服务(例如,客户关系管理(CRM)平台服务),其允许该服务的用户开发、运行和管理应用程序。系统100可以是向由多租户系统托管的多个用户/租户提供各种功能的多租户系统。因此,系统100可以执行来自各种不同用户(例如,系统100的提供商和租户)的软件例程,以及向用户、数据库和与系统100相关联的其他实体提供代码、网页和其他数据。例如,如图所示,系统100包括可以代表与系统100相关联的用户存储和访问来自数据库110的文件115的数据的数据库节点130。
在各种实施方案中,数据库110是以允许访问、存储和操纵信息的方式组织的信息集合体。因此,数据库110可以包括允许数据库节点130对存储在数据库110中的信息进行操作(例如,访问、存储等)的支持软件。在一些实施方案中,数据库110由单个存储设备或在网络(例如,存储附加网络(SAN))上连接在一起并被配置为冗余地存储信息以阻止数据丢失的多个存储设备来实现。存储设备可以持久地存储数据,因此数据库110可以用作持久性存储。在各种实施方案中,数据库110在多个数据库节点130之间共享,使得由一个数据库节点130写入到文件115的数据库记录可由其他数据库节点130访问。
在各种实施方案中,数据库110实现了日志结构合并树(LSM树)的一部分,日志结构合并树具有包括数据库记录的多层级文件115。LSM树可以包含两个高层级部分:内存部分和磁盘部分。LSM树的一个或多个“顶部”层级可以包含被写入到数据库节点130内存缓冲区的数据库记录。LSM树的其余层级可以包含文件115,文件115包括写入数据库110的数据库记录。在各种情况下,系统存储器150和系统缓存144可以促进LSM树的内存部分,而数据库110促进LSM树的磁盘部分。
在各种实施方案中,文件115是数据库记录集合。数据库记录可以是包含数据和可用于查找数据库记录的相应数据库键码的键值对。例如,数据库记录可以与数据库表中的数据行相对应,其中数据库记录指定与数据库表相关联的一个或多个属性的值。在各种实施方案中,文件115与由包括在文件115中的数据库记录的键码限定的一个或多个数据库键码范围相关联。设想其中文件115存储分别与键码“AA”、“AB”和“AC”相关联的三个数据库记录的实例。那三个键码跨越数据库键码范围AA至AC,因此文件115可以与数据库键码范围AA至AC相关联。如本文所讨论的,数据库节点130可以使用字典树120来确定文件115是否具有与落入指定数据库键码范围内的数据库键码相关联的数据库记录。
在各种实施方案中,字典树120是包含子字典树数据结构集合的字典树数据结构,每个子字典树数据结构包括链接节点集合。图2中示出了字典树120的实例。字典树120可以是能够提供与一个或多个文件115相关联的数据库键码范围的指示的概率型数据结构。如本文所使用的,术语“概率型数据结构”是指对指示特定项不存在或可能存在于系统内特定位置的信息进行维护的数据结构。作为实例,概率型数据结构可以对指示数据库记录不存在或可能存在于文件内的信息进行存储。在各种实施方案中,字典树120具有比相应的文件115小得多的存储器占用量。因此,数据库节点130可以比访问相应的文件115更快且更有效地访问字典树120。因此,使用字典树120来针对某些数据库记录是否可能被包括在给定的文件115中进行检查,而不是直接访问给定的文件115来针对数据库记录进行检查,可以为系统100提供显著的性能提升。
在各种实施方案中,当将数据库记录写出到文件115时,数据库节点130针对文件115而生成字典树120。字典树120可以形成树形数据结构,其分支与被写入到相应文件115的那些数据库记录的数据库键码相对应。于是,分支可以包含表示相应数据库键码的字符值的节点。在各种实施方案中,当数据库节点130希望确定文件115是否可能包括某个数据库记录时,数据库节点130可以执行单个键码查找,单个键码查找包括针对其节点与数据库记录的数据库键码的字符值相匹配的分支而对相应字典树120进行搜索。数据库节点130还可以执行键码范围查找,键码范围查找包括针对其汇集节点落在指定键码范围内的任何分支而对相应的字典树120进行搜索。如果可以在字典树120中找到这样的分支,则数据库节点130可以确定在相应的文件115中可能存在落入指定键码范围内的至少一个数据库记录。
在各种实施方案中,系统100是利用多个数据库节点130而实现的,这些数据库节点在将数据库记录刷新到数据库110之前首先将数据库记录写入它们自己的内存缓冲区。在操作期间,数据库节点130可能希望访问数据行的最新版本,作为处理数据库事务的一部分。然而,该最新版本可以存储在另一数据库节点130的内存缓冲区中。因此,在前的数据库节点130可以向在后的数据库节点130发出数据库记录请求,以便确定最新版本是否存储在在后的数据库节点130处。在许多情况下,它未被存储在在后的数据库节点130处,资源就浪费了。因此,在各种实施方案中,字典树120还可用于确定数据库记录是否可能存在于另一数据库节点130的内存缓冲区中,进而确定是否应发出数据库记录请求。
在各种实施方案中,数据库节点130是能够提供数据库服务(例如数据存储、数据检索和/或数据操纵)的硬件、软件或其组合。这样的数据库服务可以被提供给系统100内的其他组件和/或系统100外部的组件。作为实例,数据库节点130可以从请求将数据写入到数据库110或从该数据库读取数据的应用程序服务器(未示出)接收数据库事务请求。数据库事务请求可以指定SQL选择命令以从一个或多个数据库表中选择一行或多行。可以在数据库记录中对行的内容进行限定,因此数据库节点130可以定位并返回与所选择的一个或多个表行相对应的一个或多个数据库记录。在一些情况下,数据库事务请求可以指示数据库节点130针对LSM树而写入一个或多个数据库记录。在各种实施方案中,数据库节点130在将数据库记录刷新到数据库110之前首先将这些数据库记录写入到系统缓存144和系统存储器150。
在各种实施方案中,计算综合装置140是处理器、处理器核和/或缓存144的集合体。作为实例,计算综合装置140可以包括具有其自己内部系统缓存144的4个处理器核。计算综合装置140的处理器核可以被配置为执行特定指令集体系结构(ISA)的指令,其可以包括操作系统指令和用户应用指令(例如,可执行以实现数据库应用程序146的指令)。这些指令可以存储在非暂时性计算机可读介质中,例如联接到计算综合装置140的系统存储器150。系统存储器150可以是易失性存储器(例如,动态随机存取存储器)或非易失性存储器(例如,NAND闪存)。计算综合装置140可以从系统存储器150检索程序指令的集合,并执行程序指令以进行本文所述的功能,诸如数据库应用程序146。
在各种实施方案中,数据库应用程序146是可执行用于管理数据库110的程序指令集合,包括管理围绕数据库110而构建的LSM树。因此,数据库应用程序146可以处理数据库事务以从LSM树读取记录和向LSM树写入记录。数据库应用程序146可以对描述LSM树的结构布局的元数据进行维护,包括文件115存储在数据库110的何处以及哪些记录可以包括在那些文件115中。在各种实施方案中,元数据包括与存储在数据库110处的文件115相对应的字典树120。如所讨论的,数据库应用程序146可以使用元数据来执行更快且更有效的键码范围查找作为处理数据库事务的一部分。
为了促进数据库事务的处理,在各种实施方案中,数据库节点130使用字典树120。例如,如所讨论的,当针对落入数据库键码范围内的数据库记录进行搜索时,数据库节点130可以使用字典树120来标识可能包括这样的数据库记录的文件115和/或数据库节点130。因此,数据库节点130可以首先从数据库110中检索一个或多个字典树120,然后将它们存储在系统存储器150中。在一些实施方案中,当数据库节点130希望检查特定文件115和/或其他数据库节点130时,数据库节点130在此时检索相应的字典树120并将其存储在系统存储器150中。一旦将字典树120存储在系统存储器150中,数据库节点130就可以开始执行对字典树120的遍历。
当遍历字典树120时,数据库节点130可以向系统存储器150发出存储器提取148,以将字典树120的子字典树125加载到系统缓存144中,子字典树包括整个字典树120的根节点。如上所述,字典树120包含子字典树125的集合。在各种实施方案中,子字典树125是具有由与字符值相对应的链接节点构成的一个或多个分支的树形数据结构。例如,子字典树125的一个分支可以与特定数据库键码的一部分或全部相对应——该数据库键码的其余部分可以与链接到在前的子字典树125的其他子字典树125的分支相对应。当在系统缓存144和系统存储器150中存储时,可以将子字典树125在内存地址空间中存储为信息/数据(字节)的一个连续块。然而,在一些情况下,可以不将字典树120存储为一个信息的连续块,即,各个子字典树125在存储器中可以彼此不连续。但是在一些情况下,可以将字典树120在存储器中存储为一个信息的连续块。在各种实施方案中,子字典树125的存储大小不超过系统缓存144的存储空间。因此,数据库节点130可以将整个子字典树125加载到系统缓存144中。然而,字典树120可以大于系统缓存144的存储空间,因此不能由数据库节点130整体加载到系统缓存144中。参考图2对子字典树125的一个实例进行讨论。
在已经将子字典树125加载到系统缓存144之后,数据库节点130可以接下来开始遍历该子字典树125的分支,以确定这些分支是否与落入特定数据库键码范围内的数据库键码相对应。在各种情况下,当遍历第一子字典树125的给定分支时,数据库节点130可以到达分支中与第二子字典树125中包括的另一节点链接的节点。数据库节点130可以使用包括在第一子字典树125中的指针信息将第二子字典树125加载到系统缓存144,指针信息对第二子字典树125在系统存储器150中存储的存储位置进行标识。数据库节点130可以接下来经由存储在系统缓存144中的第二子字典树125继续遍历该分支。按这种方式,数据库节点130可以遍历可延伸跨越多个子字典树125的分支。在各种实施方案中,当数据库节点130访问跨越一个层级范围的子字典树125时,数据库节点130访问这些层级内的所有节点的子集,其他的节点涵盖在跨越该层级范围的其他子字典树125中。通过不必访问层级内的所有节点作为遍历特定分支的一部分,数据库节点130可以使用将被与特定分支不相关的节点占用的存储空间来访问字典树120的较低层级中与该特定分支的遍历相关的更多节点。
现在转到图2,示出了字典树120的示例性元素及其在系统存储器150内的布局的框图。在所示实施方案中,字典树120包括子字典树125A-D,每个子字典树具有节点210的集合。如图所示,子字典树125A包括节点210A、210B、210E、210F和210K;子字典树125B包括节点210C和210G;子字典树125C包括节点210D、210H、210I、210J和210L;而子字典树125D包括节点210M。如图进一步所示,代表子字典树125A-125D的信息被连续地存储在系统存储器150中。在一些实施方案中,字典树120和/或其在系统存储器150内的布局可以与所示方式不同的方式来实现。作为实例,字典树120可以非连续地存储在系统存储器150中。
如上所述,在各种实施方案中,字典树120用于存储已经被写入到与字典树120相对应的文件115中的数据库记录的数据库键码。如图所示,所示实施方案的字典树120至少存储键码“AM”、“ART”、“OX”、“TA”、“TIP”和“TOP”。可以将每个数据库键码在字典树120中存储为形成字典树120分支的链接节点210的集合。例如,键码“TIP”被存储为形成字典树120的分支下延层级215A-D的节点210D、210I和210L。如关于图3而更详细讨论的,在各种实施方案中,节点210是存储其表示的字符值以及节点210与其他节点210链接的方式的信息相关的数据结构。
当进行键码范围查找(或者单个键码查找)时,数据库节点130可以通过发出存储器提取148将子字典树125从系统存储器150加载到系统缓存144来遍历字典树120的层级215。设想其中数据库节点130希望确定与字典树120相对应的文件115是否可能包括落在键码范围“TCP”至“TLC”内的数据库记录的实例。在各种实施方案中,数据库节点130首先向系统存储器150发出存储器提取148,以加载包括表示字典树120的根的节点210的子字典树125。在所示实施方案中,节点210A存储根字符值,进而将子字典树125A提取入系统缓存144。如图所示,提取五个节点210——这可能是因为系统缓存144可能具有一次仅存储五个节点210的信息的容量。
一旦子字典树125A被加载到系统缓存144,数据库节点130可以确定节点210A被链接到三个节点:节点210B、210C和210D。数据库节点130可以进一步确定节点210B和210C表示键码范围“TCP”至“TLC”之外的字符值,而节点210D的字符值“T”落入该范围内。这样,数据库节点130可以遍历包括节点210D的分支。由于子字典树125A不包括节点210D,数据库节点130可以发出另一个存储器提取148以将子字典树125C加载到系统缓存中。在各种实施方案中,因为节点210A被链接到存储为其他子字典树125的一部分的节点210,所以节点210A包括指示其他子字典树125在系统存储器150中存储的存储位置的指针220A和220B。因此,使用指针220A,数据库节点130可以在不加载其他子字典树125的情况下将子字典树125C加载到系统缓存144。
一旦子字典树125C被加载到系统缓存144,数据库节点130就可以遍历分支并确定链接节点210D、210I和210L形成落入键码范围“TCP”至“TLC”内的键码,进而相应的文件115可以存储落入该键码范围内的数据库记录。在各种情况下,数据库节点130可以执行其中下延多个层级215的键码查找,但并没有针对下延的那些层级215而对所有节点210进行访问。在前面的实例中,数据库节点130没有针对节点210C、210G和215M而将信息提取入系统缓存144。通过不对在键码查找中下延的层级215的所有节点210进行访问,数据库节点130可以减少所发出的存储器提取148的数量,从而节省时间和资源消耗。
现在转到图3,示出了字典树120内的子字典树125中包括的节点210的示例性元素的框图。在所示实施方案中,子字典树125A包括节点210A,而子字典树125B包括节点210B。如图所示,节点210A包括节点信息310和指示节点210B的位置的指针信息320。如进一步所示的,指针信息320包括指针220和存储大小指示325。在一些实施方案中,节点210以与所示方式不同的方式实现。作为实例,指针信息320可以不包括存储大小指示325。
在各种实施方案中,节点信息310包括指示由相应节点210表示的字符值的信息。节点信息310可以进一步指示与节点信息310的节点210连接的节点210。例如,节点210A的节点信息310可以指示节点210A链接到节点210C,并且节点210C按顺序在节点210A之后。作为另一实例,节点210A的节点信息310可以指示节点210A自另一特定节点210下延。在一些实施方案中,节点信息310指示节点信息310的节点210存在于字典树120的哪一层级中。例如,节点信息310可以指示节点210A在从字典树120的顶部向下的第二层级中。
在各种实施方案中,指针信息320包括可用于访问链接到指针信息320的节点210的一个或多个节点210的信息。在各种情况下,指针信息320可以包括指向存在于与指针信息320的节点210相同的子字典树125中的节点210的指针(例如,存储偏移)。例如,节点210A和节点210B(未示出)可以直接链接并被包括在特定的子字典树125中。节点210A的指针信息320可以指示从中可以访问节点210B的数据结构中特定子字典树125的位置。在各种情况下,指针信息可以包括指向存在于与指针信息320的节点210不同的子字典树125中的节点210的指针(例如,存储偏移)。如图所示,节点210A的指针信息320包括标识节点210C的位置(例如,在系统存储器150中的存储地址)的指针220——即,指针220可以标识系统存储器150中包括描述所指向的节点210的信息/数据块(例如,限定节点信息310和指针信息320的字节)的位置。
因此,当从节点210A向节点210C遍历分支时,数据库节点130可以使用节点210A的指针信息320来将子字典树125B(其包括节点210C)从系统存储器150加载到系统缓存144。在各种实施方案中,指针信息320包括存储大小指示325,存储大小指示325指示包括所指向的节点210的子字典树125的大小(例如,64KB)。因此,当试图将子字典树125B引入系统缓存144时,数据库节点130可以基于由节点210A的指针信息320的存储大小指示325所指示的子字典树125b的大小而确定从系统存储器150请求多少数据来加载子字典树125B。作为实例,存储大小指示325可以规定子字典树125被存储在系统缓存144中时消耗的缓存行数。因此,数据库节点130可从系统存储器150提取该缓存行数所值的数据。通过使用存储大小指示325,数据库节点130可以不从系统存储器150提取比加载子字典树125所需的更多的数据。
现在转到图4,示出了将文件115和字典树120写入数据库110的数据库应用程序146的框图。如进一步所示,数据库应用程序146接收具有键码415的事务请求410的集合。事务请求410可以指定要作为文件115写入到数据库110的数据库记录集合(以及它们相对应的键码415)。因此,数据库应用程序146可以处理事务请求410以将一个或多个文件115写入到数据库110。作为处理事务请求410的一部分,数据库应用程序146可以针对一个或多个文件115而生成相对应的字典树120,字典树120包括那些一个或多个文件115中包括的数据库记录的键码415。在另一些情况下,作为处理事务请求410的一部分,数据库应用程序146可以基于存储在数据库节点130的内存缓冲区(其可以使用系统缓存144和系统存储器150来实现)中的数据库记录的键码来生成字典树120的集合。
当生成字典树120时,数据库应用程序146可以将键码415插入字典树120作为字典树树状结构的分支。在各种情况下,键码415可以共享共同的前缀,并且因此共享分支的共同部分。例如,如图2所示,键码“AM”和“ART”在它们各自的分支中共享共同的节点210(即,节点210B)。作为生成字典树120的一部分,在各种实施方案中,数据库应用程序146确定将字典树120的节点210划分为子字典树125。数据库应用程序146可以使用各种标准来确定如何划分节点210。一个这样的标准可以包括确保接近子字典树125中的节点210的数量与子字典树125中的层级215的数量之间的比例。例如,数据库应用程序146可以确保对于每四个节点,子字典树125下延至少一个附加层级。因此,如果在该实例中子字典树125包括九个节点210,则子字典树125包括三个层级215。另一个标准可以包括确保接近字典树120中节点210的数目与子字典树125的数目之间的比例。例如,如果字典树120中有五十个节点210,则数据库应用程序146可以将这些节点210划分成五个子字典树125,使得每个子字典树125有十个节点210。另一个标准可以包括确保访问字典树120的整个给定分支所需的存储器提取148的平均数量最小化。在各种实施方案中,在确定节点210的划分之后,数据库应用程序146将每组节点210构造为相应的数据连续块。
在一些情况下,数据库应用程序146可以更新字典树120。例如,如果某个字典树120正在被用于确定在另一数据库节点130处是否存储了针对指定键码415的记录,并且存储在另一数据库节点130处的记录的性质随时间改变,则字典树120可被更新以反映这些改变。即,如果另一个数据库节点130对其内存缓冲区进行更新以包括新的数据库记录,则由数据库应用程序146使用的字典树120可以被更新以合并该数据库记录的键码415。在各种情况下,当更新字典树120时,数据库应用程序146将一个或多个节点210添加到字典树120。当添加一个或多个节点210时,数据库应用程序146可以将特定的子字典树125修改为包含有所添加的一个或多个节点210。这可以使特定的子字典树125跨越一个或多个附加的层级215。在一些情况下,数据库应用程序146可以创建新的子字典树125以包括一个或多个所添加的节点210。在另一些情况下,数据库应用程序146可以将特定的子字典树125分成多个子字典树125,其中子字典树125中的一个包含有所添加的一个或多个节点210。
现在转到图5,示出了方法500的流程图。方法500是由计算机系统(例如,数据库节点130)执行以便于处理事务请求(例如,事务请求410)的方法的一个实施方案。方法500可以通过执行存储在非瞬态计算机可读介质上的一个或多个程序指令来进行。在一些实施方案中,方法500可包括比所示更多或更少的步骤,例如,方法500可以包括计算机系统接收事务请求的步骤。
方法500开始于步骤510,计算机系统操作数据库(如数据库110)。在各种实施方案中,操作数据库包括计算机系统接收事务请求以执行包括向数据库写入包括与键码集合(例如,键码415的集合)相关联的记录集合的文件(例如,文件115)的事务。计算机系统可以执行事务,事务可以包括生成多层级树形数据结构(例如,字典树120)使得多层级树形数据结构中包括的节点(例如,节点210)与键码集合的字符相对应。多层级树形数据结构可以与文件相关联。
在步骤520中,计算机系统存储可用于针对数据库执行键码查找的多层级树形数据结构。在各种情况下,多层级树形数据结构可以在系统存储器(例如,系统存储器150)中存储为多个子树形数据结构(例如,子字典树125),每个子树形数据结构包括链接节点集合。多个子树形数据结构中给定的一个可以在系统存储器中存储为信息的相应连续块。给定子树形数据结构的相应连续块的存储大小可以不超过与系统存储器联接的系统缓存(例如,系统缓存144)的存储大小。多层级树形数据结构可以在系统存储器中存储为信息的连续块。
在步骤530中,计算机系统访问涵盖多层级树形数据结构中的特定层级范围(例如,层级215A-D)的第一特定子树形数据结构(例如,子字典树125A)的相应连续块。在各种情况下,可以在没有访问涵盖特定层级范围内一个或多个层级的一个或多个其他子树形数据结构(例如,子字典树125B和125C)的情况下执行访问。计算机系统可以将多层级树形数据结构更新为包括一个或多个节点。作为更新结构的一部分,计算机系统可以修改多个子树形数据结构中的特定一个,使得由特定子树形数据结构涵盖的特定层级范围发生改变(例如,子树形数据结构被扩展为包含有新添加的不同层级中的节点)。在一些情况下,更新可以包括将多个子树形数据结构中的一个分成两个或更多个子树形数据结构。
在一些情况下,第一特定子树形数据结构的链接节点集合可以与插入多层级树形数据结构的键码的字符相对应。特定键码可以与第一特定子树形数据结构中的至少一个节点和第二特定子树形数据结构中的至少一个节点相对应。第一特定子树形数据结构的相应连续块可以包括指针信息(例如,指针信息320),指针信息对第二特定子树形数据结构的相应连续块在系统存储器中存储的位置进行标识。这样,计算机系统可以使用第一特定子树形数据结构的相应连续块中包括的指针信息将第二特定子树形数据结构的相应连续块从系统存储器提取入系统缓存。指针信息可以标识第二特定子树形数据结构的相应连续块的存储大小。存储大小可以指示第二特定子树形数据结构的相应连续块当存储在与系统存储器联接的系统缓存中时消耗的缓存行数。
现在转到图6,示出了方法600的流程图。方法600是由计算机系统(例如,数据库节点130)来执行以便于处理事务请求(例如,事务请求410)的方法的一个实施方案。方法600可以通过执行存储在非瞬态计算机可读介质上的一个或多个程序指令来进行。在一些实施方案中,方法600可包括比所示更多或更少的步骤,例如,方法600可以包括计算机系统接收事务请求的步骤。
方法600开始于步骤610,计算机系统在系统存储器(例如,系统存储器150)中存储包括多个子树形数据结构(例如,子字典树125)的树形数据结构(例如,字典树120)。与作为树形数据结构的特定分支的一部分的第二子树形数据结构(例如,子字典树125C)连接的第一子树形数据结构(例如,子字典树125A)可以包括指针信息(例如,指针信息320),指针信息对第二子树形数据结构在系统存储器中存储的位置进行标识。指针信息可以标识第二子树形数据结构的存储大小(例如,存储大小指示325)。在各种实施方案中,树形数据结构的存储大小不允许将树形数据结构整体加载到系统缓存中,而多个子树形数据结构中给定的一个的存储大小允许将给定的子树形数据结构整体加载到系统缓存。在一些情况下,树形数据结构可以不在系统存储器中存储为信息的一个连续块。
在步骤620中,计算机系统使用树形数据结构执行包括遍历特定分支的键码范围查找。该执行可以包括使用第一子树形数据结构中包括的指针信息将第二子树形数据结构加载到系统缓存(例如,系统缓存144)。在一些实施方案中,将第二子树形数据结构加载到系统缓存是基于存储大小的(例如,计算机系统可以仅针对来自包含有第二子树形数据结构的系统存储器的数据而发出存储器请求)。指针信息可以进一步标识第三子树形数据结构(例如,子字典树125B)在系统存储器中存储的位置。第一子树形数据结构可以与作为树形数据结构另一个特定分支的一部分的第三子树形数据结构连接。在一些实施方案中,计算机系统将树形数据结构更新为包括节点集合。更新可以导致树形数据结构包括一个或多个附加的子树形数据结构。
现在转到图7,描绘了可以实现系统100、数据库110和/或数据库节点130的示例性计算机系统700的框图。计算机系统700包括通过互连760(例如,系统总线)联接到系统存储器720和I/O接口740的处理器子系统780。I/O接口740联接到一个或多个I/O设备750。计算机系统700可以是各种类型的设备中的任一种,包括但不限于:服务器系统,个人计算机系统,台式计算机,膝上型或笔记本型计算机,主计算机系统,平板计算机,手持式计算机,工作站,网络计算机,消费设备诸如移动电话、音乐播放器或个人数字助理(PDA)。尽管为了方便起见在图7中示出了单个的计算机系统700,但是系统700也可以被实现为一起操作的两个或更多计算机系统。
处理器子系统780可以包括一个或多个处理器或处理单元。在计算机系统700的各实施方案中,处理器子系统780的多个实例可以联接到互连760。在各种实施方案中,处理器子系统780(或780内的每个处理器单元)可以包含缓存或其他形式的板载存储器。
系统存储器720可用于存储可由处理器子系统780执行以使系统700进行本文所述的各种操作的程序指令。系统存储器720可以使用不同的物理存储器介质来实现,例如硬盘存储器、软盘存储器、可移动磁盘存储器、闪存、随机存取存储器(RAM-SRAM、Edo RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、只读存储器(PROM、EEPROM等)等。计算机系统700中的存储器不限于主存储器诸如存储器720。相反,计算机系统700还可以包括其他形式的存储器,例如处理器子系统780中的缓冲存储器和I/O设备750上的辅助存储器(例如,硬盘驱动器、存储阵列等)。在一些实施方案中,这些其他形式的存储器还可以存储可由处理器子系统780执行的程序指令。在一些实施方案中,执行时实现数据库应用程序146的程序指令可以被包括/存储在系统存储器720内。
根据各种实施方案,EO接口740可以是被配置为联接到其他设备并与其他设备通信的各种类型的接口中的任一种。在一个实施方案中,I/O接口740是从前端到一个或多个后端总线的桥接芯片(例如,南桥)。EO接口740可以经由一个或多个相应的总线或其他接口联接到一个或多个EO设备750。I/O设备750的实例包括存储设备(硬盘驱动器、光盘驱动器、可移动闪存驱动器、存储阵列、SAN或其相关联的控制器)、网络接口设备(例如,到局域网或广域网)或其他设备(例如,图形、用户接口设备等)。在一个实施方案中,计算机系统700经由网络接口设备750联接到网络(例如,被配置为通过WiFi、蓝牙、以太网等进行通信)。
本申请主题的实现包括但不限于以下实例1至20。
1.一种方法,包含:
由计算机系统操作数据库;
由计算机系统存储能够用于针对数据库执行键码查找的多层级树形数据结构,其中多层级树形数据结构在系统存储器中存储为多个子树形数据结构,每个子树形数据结构包含链接节点集合,其中多个子树形数据结构中给定的一个在系统存储器中存储为信息的相应连续块;以及
由计算机系统访问涵盖多层级树形数据结构中的特定层级范围的第一特定子树形数据结构的相应连续块,其中访问在没有访问涵盖特定层级范围内一个或多个层级的一个或多个其他子树形数据结构的情况下执行。
2.根据实例1所述的方法,其中第一特定子树形数据结构的链接节点集合与插入多层级树形数据结构的键码的字符相对应,并且其中特定键码与第一特定子树形数据结构中的至少一个节点和第二特定子树形数据结构中的至少一个节点相对应。
3.根据实例2所述的方法,其中第一特定子树形数据结构的相应连续块包括对第二特定子树形数据结构的相应连续块在系统存储器中存储的位置进行标识的指针信息。
4.根据实例3所述的方法,其中访问还包括:
使用第一特定子树形数据结构的相应连续块中包括的指针信息而将第二特定子树形数据结构的相应连续块从系统存储器提取入系统缓存。
5.根据实例3所述的方法,其中指针信息对第二特定子树形数据结构的相应连续块的存储大小进行标识。
6.根据实例5所述的方法,其中存储大小指示第二特定子树形数据结构的相应连续块当存储在与系统存储器联接的系统缓存中时消耗的缓存行数。
7.根据实例1所述的方法,其中给定子树形数据结构的相应连续块的存储大小不超过与系统存储器联接的系统缓存的存储大小。
8.根据实例1所述的方法,还包含:
由计算机系统将多层级树形数据结构更新为包括一个或多个节点,其中更新包括修改多个子树形数据结构中特定的一个使得特定的子树形数据结构涵盖的特定层级范围发生改变。
9.根据实例1所述的方法,其中操作数据库包括:
接收执行事务的请求,事务包括将文件写入数据库,文件包括与键码集合相关联的记录集合;以及
执行事务,包括生成多层级树形数据结构使得多层级树形数据结构中包括的节点与键码集合的字符相对应,其中多层级树形数据结构与文件相关联。
10.根据实例1所述的方法,其中多层级树形数据结构在系统存储器中存储为信息的连续块。
11.一种非暂时性计算机可读介质,其上存储有程序指令,程序指令能够引起计算机系统执行操作,操作包含:
存储能够用于针对数据库执行键码查找的多层级树形数据结构,其中多层级树形数据结构在系统存储器中存储为多个子树形数据结构,每个子树形数据结构包含链接节点集合,其中多个子树形数据结构中给定的一个在系统存储器中存储为信息的相应连续块;以及
访问涵盖多层级树形数据结构中的特定层级范围的第一特定子树形数据结构的相应连续块,其中访问在没有访问涵盖特定层级范围内一个或多个层级的一个或多个其他子树形数据结构的情况下执行。
12.根据实例11所述的介质,其中第一特定子树形数据结构的相应连续块是使用第二特定子树形数据结构的相应连续块中包括的指针信息来访问的。
13.根据实例11所述的介质,其中操作还包含:
将多层级树形数据结构更新为包括节点集合,其中更新包括将多个子树形数据结构之一的链接节点集合扩展为包括节点集合中的一个或多个。
14.根据实例11所述的介质,其中操作还包含:
将多层级树形数据结构更新为包括节点集合,其中更新包括将多个子树形数据结构之一分成两个或多个子树形数据结构。
15.一种方法,包含:
由计算机系统在系统存储器中存储包含多个子树形数据结构的树形数据结构,其中与作为树形数据结构特定分支的一部分的第二子树形数据结构连接的第一子树形数据结构包括对第二子树形数据结构在系统存储器中存储的位置进行标识的指针信息;以及
由计算机系统使用树形数据结构执行包括遍历特定分支的键码范围查找,其中该执行包括使用第一子树形数据结构中包括的指针信息将第二子树形数据结构加载到系统缓存。
16.根据实例15所述的方法,其中指针信息还对第三子树形数据结构在系统存储器中存储的位置进行标识,并且其中第一子树形数据结构与作为树形数据结构另一个特定分支的一部分的第三子树形数据结构连接。
17.根据实例15所述的方法,其中指针信息对第二子树形数据结构的存储大小进行标识,并且其中将第二子树形数据结构加载到系统缓存是基于该存储大小的。
18.根据实例15所述的方法,其中树形数据结构的存储大小不允许将树形数据结构整体加载到系统缓存,并且其中多个子树形数据结构中给定的一个的存储大小允许将给定的子树形数据结构整体加载到系统缓存。
19.根据实例15所述的方法,还包含:
将树形数据结构更新为包括节点集合,其中更新导致树形数据结构包括一个或多个附加的子树形数据结构。
20.根据实例15所述的方法,其中树形数据结构在系统存储器中不存储为信息的一个连续块。
尽管上面已经描述了具体的实施方案,即使在关于特定特征仅描述了单个实施方案的情况下,这些实施方案也并不旨在限制公开文本的范围。除非另有说明,否则在公开文本中提供的特征的示例是说明性的而不是限制性的。以上描述旨在涵盖对受益于公开文本的本领域技术人员来说显而易见的替换、修改和等同方案。
公开文本的范围包括本文公开的任何特征或特征的组合(明确地或隐含地),或其任何概括,无论其是否解决了本文提出的任何或所有问题。因此,在本申请(或要求其优先权的申请)的审查期间,可以对任何这样的特征组合提出新的权利要求。特别地,参考所附权利要求,从属权利要求的特征可以与独立权利要求的特征相结合,并且各个独立权利要求中的特征可以以任何适当的方式组合,而不仅仅是以所附权利要求中列举的特定组合。
- 一种基于字典树的ip匹配方法
- 一种基于字典树的中文地理编码方法
- 具有安全访问限制管理的分布式私有子空间化区块链数据结构
- 提供分布式私有子空间化数据结构的方法和系统