CN113626433B - 一种基于两层art树的数据存储方法 - Google Patents

一种基于两层art树的数据存储方法 Download PDF

Info

Publication number
CN113626433B
CN113626433B CN202110884247.4A CN202110884247A CN113626433B CN 113626433 B CN113626433 B CN 113626433B CN 202110884247 A CN202110884247 A CN 202110884247A CN 113626433 B CN113626433 B CN 113626433B
Authority
CN
China
Prior art keywords
data
range partition
range
partition
curraggearea
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.)
Active
Application number
CN202110884247.4A
Other languages
English (en)
Other versions
CN113626433A (zh
Inventor
梁波
张炜刚
贾德星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Yunxi Technology Co ltd
Original Assignee
Shanghai Yunxi Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Yunxi Technology Co ltd filed Critical Shanghai Yunxi Technology Co ltd
Priority to CN202110884247.4A priority Critical patent/CN113626433B/zh
Publication of CN113626433A publication Critical patent/CN113626433A/zh
Application granted granted Critical
Publication of CN113626433B publication Critical patent/CN113626433B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明特别涉及一种基于两层ART树的数据存储方法。该基于两层ART树的数据存储方法,按Key值范围分区的方式拆分数据,使用两级ART树索引结构,第一级ART索引用于Key值范围分区,第二级ART索引用于索引范围分区内的数据。该基于两层ART树的数据存储方法,通过优化存储引擎的索引结构,提升了存储引擎的性能,解决了使用原始的一层ART树索引结构带来的索引结构查询性能随着数据量增大而大幅降低的问题。

Description

一种基于两层ART树的数据存储方法
技术领域
本发明涉及数据存储结构技术领域,特别涉及一种基于两层ART树的数据存储方法。
背景技术
ART(Adaptive Radix Tree,自适应基数/前缀树)是以二进制位串为关键字的前缀树,是一种多叉树形结构,同时又类似多层索引表,每个中间节点包含指向多个子节点的指针数组,叶子节点包含指向实际的对象的指针。
存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。
内存中数据的索引结构是影响存储引擎性能的重要因素。ART树在所有的索引结构中,查询性能最优。但是,索引结构普遍存在一个问题,随着索引的数据量增大,查询性能会降低。根据论文《The Adaptive Radix Tree:ARTful Indexing for Main-MemoryDatabases》中记载的测试结果,当数据量从64K提升到16M时,ART树的查询性能降低了至少4倍,这种现象严重影响到了存储引擎的性能。
针对索引结构查询性能随着数据量增大而大幅降低现象,本发明提出了一种基于两层ART树的数据存储方法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于两层ART树的数据存储方法。
本发明是通过如下技术方案实现的:
一种基于两层ART树的数据存储方法,其特征在于:按Key值范围分区的方式拆分数据,使用两级ART树索引结构,第一级ART索引用于Key值范围分区,第二级ART索引用于索引范围分区内的数据;
所述范围分区内的数据集是真实的数据集或数据的指针形成的数据集。
包括以下步骤:
第一步,数据库存储引擎刚启动时,创建第一个范围分区,其存储Key值的范围为(MIN,MAX),并且使用该范围分区最大值MAX作为Key值,将范围分区挂载到第一层ART树上,
第二步,将待插入的数据挂载到范围分区的第二层ART树上,启动待拆分队列处理线程作为后台线程,异步优化索引结构。
所述第二步中,设置作为全局参数RANGE_AREA_MAX_KVS,即范围分区最大数据量阈值;当某个范围分区数据量超过范围分区最大数据量阈值时,将该范围分区拆解成两个。
所述第二步中,数据插入流程如下:
S1:查询第一层的ART树,找到大于等于待插入的Key值对应的范围分区,存入变量curRangeArea中;
S2:判断范围分区curRangeArea的状态,如果状态为“待删除”,则返回S1;
S3:将待插入的数据挂载到范围分区curRangeArea的第二层ART树上;
S4:判断范围分区curRangeArea的状态,如果状态为“正在拆分”,则将数据放入该范围分区curRangeArea的增量数据队列中,结束并退出,否则跳转到S5;
S5:判断范围分区curRangeArea中数据量是否大于设置的范围分区最大数据量阈值RANGE_AREA_MAX_KVS,如果不大于,则结束并退出;如果大于,则将范围分区curRangeArea放入待拆分队列中,结束并退出。
所述第二步中,待拆分队列处理线程处理流程如下:
S1:判断当前程序是否正在关闭,如果是,则退出线程;
S2:判断待拆分队列长度,如果长度为0,则沉睡特定时间(默认阈值为100微秒),然后重新跳转到S2;
S3:从待拆分队列中弹出一个范围分区存储到变量curRangeArea中,修改该范围分区的状态为“正在拆分”;
S4:遍历范围分区curRangeArea的ART树,并将数据按照Key值的字节序升序存储到队列Q中,统计队列中数据量存储到变量S中;
S5:计算拆分成的新的范围分区的数量以及每个范围分区的数据量;
S6:将队列Q中的数据按照顺序插入新的范围分区中;
S7:将范围分区curRangeArea的状态置为“待删除”;
S8:处理范围分区curRangeArea增量数据队列,对于增量数据队列中的每条记录,首先判断记录是否在队列Q中,如果存在则跳过,如果不存在,则使用数据插入流程将数据插入到索引结构中;
S9:删除范围分区curRangeArea,释放该范围分区的空间,跳转到S1。
所述步骤S5中,新的范围分区的数量N的计算公式如下:
第i个新的范围分区的分配到的数据量Di计算公式如下:
公式中,变量S为范围分区curRangeArea的数据量;变量M为全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量P为每个分区分得的数据量比例。
所述步骤S5中,每个分区分得的数据量比例P的计算公式如下:
公式中,变量S指范围分区curRangeArea的数据量;变量M指全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量τ为衰减因子,控制衰减速度,默认配置为10;e为自然常数。
所述步骤S6中,当第i个新范围分区的数据量等于Di时,将第i个新范围分区最后插入的Key值作为该范围分区的Key值,将该新范围分区挂载到第一层ART树上,并且停止第i个新范围分区插入数据,改为向第i+1个新范围分区插入。
本发明的有益效果是:该基于两层ART树的数据存储方法,通过优化存储引擎的索引结构,提升了存储引擎的性能,避免了使用原始的一层ART树索引结构带来的索引结构查询性能随着数据量增大而大幅降低的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1为本发明两层ART树索引结构示意图。
附图2为本发明数据插入流程示意图。
附图3为本发明待拆分队列处理线程处理流程示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
对实施例中涉及的术语进行解释:
Key值:用于检索的字符串或字节数组。
Value:Key值对应的数据。
叶子节点:处于ART树最底层的节点,这些节点没有子节点;叶子节点用于存储value。
中间节点:在ART树中除叶子节点外的所有节点。
根节点:ART树中处于深度0的中间节点,深度0层仅有一个中间节点,就是根节点。
该基于两层ART树的数据存储方法,按Key值范围分区的方式拆分数据,使用两级ART树索引结构,第一级ART索引用于Key值范围分区,第二级ART索引用于索引范围分区内的数据;
附图1为两层ART树的数据存储结构。附图中,最上面的三角形表示第一层ART树,下面方框表示范围分区,每个范围分区内有一个三角形表示第二层ART树,范围分区内的圆角矩形表示key范围内的数据集。每个范围分区是第一层ART树的叶子节点,每个范围分区内的数据集是该范围分区内第二层ART树的叶子节点。
所述范围分区内的数据集不一定是真实数据的数据集,也可以是数据的指针形成的数据集,而且数据中包含Key值信息,可以通过数据生成出对应的Key值。
包括以下步骤:
第一步,数据库存储引擎刚启动时,创建第一个范围分区,其存储Key值的范围为(MIN,MAX),并且使用该范围分区最大值MAX作为Key值,将范围分区挂载到第一层ART树上,
第二步,将待插入的数据挂载到范围分区的第二层ART树上,启动待拆分队列处理线程作为后台线程,异步优化索引结构。
所述第二步中,设置作为全局参数RANGE_AREA_MAX_KVS,即范围分区最大数据量阈值;当某个范围分区数据量超过范围分区最大数据量阈值时,将该范围分区拆解成两个。
所述第二步中,数据插入流程如下:
S1:查询第一层的ART树,找到大于等于待插入的Key值对应的范围分区,存入变量curRangeArea中;
S2:判断范围分区curRangeArea的状态,如果状态为“待删除”,则返回S1;
S3:将待插入的数据挂载到范围分区curRangeArea的第二层ART树上;
S4:判断范围分区curRangeArea的状态,如果状态为“正在拆分”,则将数据放入该范围分区curRangeArea的增量数据队列中,结束并退出,否则跳转到S5;
S5:判断范围分区curRangeArea中数据量是否大于设置的范围分区最大数据量阈值RANGE_AREA_MAX_KVS,如果不大于,则结束并退出;如果大于,则将范围分区curRangeArea放入待拆分队列中,结束并退出。
所述第二步中,待拆分队列处理线程处理流程如下:
S1:判断当前程序是否正在关闭,如果是,则退出线程;
S2:判断待拆分队列长度,如果长度为0,则沉睡特定时间(默认阈值为100微秒),然后重新跳转到S2;
S3:从待拆分队列中弹出一个范围分区存储到变量curRangeArea中,修改该范围分区的状态为“正在拆分”;
S4:遍历范围分区curRangeArea的ART树,并将数据按照Key值的字节序升序存储到队列Q中,统计队列中数据量存储到变量S中;
S5:计算拆分成的新的范围分区的数量以及每个范围分区的数据量;
S6:将队列Q中的数据按照顺序插入新的范围分区中;
S7:将范围分区curRangeArea的状态置为“待删除”;
S8:处理范围分区curRangeArea增量数据队列,对于增量数据队列中的每条记录,首先判断记录是否在队列Q中,如果存在则跳过,如果不存在,则使用数据插入流程将数据插入到索引结构中;
S9:删除范围分区curRangeArea,释放该范围分区的空间,跳转到S1。
所述步骤S5中,新的范围分区的数量N的计算公式如下:
第i个新的范围分区的分配到的数据量Di计算公式如下:
公式中,变量S为范围分区curRangeArea的数据量;变量M为全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量P为每个分区分得的数据量比例。
所述步骤S5中,每个分区分得的数据量比例P的计算公式如下:
公式中,变量S指范围分区curRangeArea的数据量;变量M指全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量τ为衰减因子,控制衰减速度,默认配置为10;e为自然常数。
所述步骤S6中,当第i个新范围分区的数据量等于Di时,将第i个新范围分区最后插入的Key值作为该范围分区的Key值,将该新范围分区挂载到第一层ART树上,并且停止第i个新范围分区插入数据,改为向第i+1个新范围分区插入。
以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

Claims (2)

1.一种基于两层ART树的数据存储方法,其特征在于:按Key值范围分区的方式拆分数据,使用两级ART树索引结构,第一级ART索引用于Key值范围分区,第二级ART索引用于索引范围分区内的数据;
所述范围分区内的数据集是真实的数据集或数据的指针形成的数据集;
包括以下步骤:
第一步,数据库存储引擎刚启动时,创建第一个范围分区,其存储Key值的范围为(MIN,MAX),并且使用该范围分区最大值MAX作为Key值,将范围分区挂载到第一层ART树上,
第二步,将待插入的数据挂载到范围分区的第二层ART树上,启动待拆分队列处理线程作为后台线程,异步优化索引结构;
数据插入流程如下:
S1.1:查询第一层的ART树,找到大于等于待插入的Key值对应的范围分区,存入变量curRangeArea中;
S1.2:判断范围分区curRangeArea的状态,如果状态为“待删除”,则返回S1.1;
S1.3:将待插入的数据挂载到范围分区curRangeArea的第二层ART树上;
S1.4:判断范围分区curRangeArea的状态,如果状态为“正在拆分”,则将数据放入该范围分区curRangeArea的增量数据队列中,结束并退出,否则跳转到S1.5;
S1.5:判断范围分区curRangeArea中数据量是否大于设置的范围分区最大数据量阈值RANGE_AREA_MAX_KVS,如果不大于,则结束并退出;如果大于,则将范围分区curRangeArea放入待拆分队列中,结束并退出;
待拆分队列处理线程处理流程如下:
S2.1:判断当前程序是否正在关闭,如果是,则退出线程;
S2.2:判断待拆分队列长度,如果长度为0,则沉睡特定时间,然后重新跳转到S2.2;
S2.3:从待拆分队列中弹出一个范围分区存储到变量curRangeArea中,修改该范围分区的状态为“正在拆分”;
S2.4:遍历范围分区curRangeArea的ART树,并将数据按照Key值的字节序升序存储到队列Q中,统计队列中数据量存储到变量S中;
S2.5:计算拆分成的新的范围分区的数量以及每个范围分区的数据量;
新的范围分区的数量N的计算公式如下:
第i个新的范围分区的分配到的数据量Di计算公式如下:
公式中,变量S为范围分区curRangeArea的数据量;变量M为全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量P为每个分区分得的数据量比例;
每个分区分得的数据量比例P的计算公式如下:
公式中,变量S指范围分区curRangeArea的数据量;变量M指全局参数范围分区最大数据量RANGE_AREA_MAX_KVS;变量τ为衰减因子,控制衰减速度,默认配置为10;e为自然常数;
S2.6:将队列Q中的数据按照顺序插入新的范围分区中;
当第i个新范围分区的数据量等于Di时,将第i个新范围分区最后插入的Key值作为该范围分区的Key值,将该新范围分区挂载到第一层ART树上,并且停止第i个新范围分区插入数据,改为向第i+1个新范围分区插入;
S2.7:将范围分区curRangeArea的状态置为“待删除”;
S2.8:处理范围分区curRangeArea增量数据队列,对于增量数据队列中的每条记录,首先判断记录是否在队列Q中,如果存在则跳过,如果不存在,则使用数据插入流程将数据插入到索引结构中;
S2.9:删除范围分区curRangeArea,释放该范围分区的空间,跳转到S2.1。
2.根据权利要求1所述的基于两层ART树的数据存储方法,其特征在于:所述第二步中,设置作为全局参数RANGE_AREA_MAX_KVS,即范围分区最大数据量阈值;当某个范围分区数据量超过范围分区最大数据量阈值时,将该范围分区拆解成两个。
CN202110884247.4A 2021-08-03 2021-08-03 一种基于两层art树的数据存储方法 Active CN113626433B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110884247.4A CN113626433B (zh) 2021-08-03 2021-08-03 一种基于两层art树的数据存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110884247.4A CN113626433B (zh) 2021-08-03 2021-08-03 一种基于两层art树的数据存储方法

Publications (2)

Publication Number Publication Date
CN113626433A CN113626433A (zh) 2021-11-09
CN113626433B true CN113626433B (zh) 2024-01-19

Family

ID=78382374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110884247.4A Active CN113626433B (zh) 2021-08-03 2021-08-03 一种基于两层art树的数据存储方法

Country Status (1)

Country Link
CN (1) CN113626433B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114328598B (zh) * 2021-11-29 2024-06-11 上海沄熹科技有限公司 基于ClickHouse数据库的pipeline的缓存优化方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101567003A (zh) * 2009-05-27 2009-10-28 清华大学 并行文件系统中资源的管理和分配方法
CN107807932A (zh) * 2016-09-08 2018-03-16 腾讯科技(深圳)有限公司 一种基于路径枚举的层级数据管理方法和系统
CN110888886A (zh) * 2019-11-29 2020-03-17 华中科技大学 一种索引结构及构建方法、键值存储系统及请求处理方法
CN112269786A (zh) * 2020-11-02 2021-01-26 浪潮云信息技术股份公司 一种内存数据库kv存储引擎索引的创建方法
CN112765181A (zh) * 2021-01-27 2021-05-07 东北大学 一种基于区块索引结构的数据溯源查询方法
CN112784120A (zh) * 2021-01-25 2021-05-11 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101567003A (zh) * 2009-05-27 2009-10-28 清华大学 并行文件系统中资源的管理和分配方法
CN107807932A (zh) * 2016-09-08 2018-03-16 腾讯科技(深圳)有限公司 一种基于路径枚举的层级数据管理方法和系统
CN110888886A (zh) * 2019-11-29 2020-03-17 华中科技大学 一种索引结构及构建方法、键值存储系统及请求处理方法
CN112269786A (zh) * 2020-11-02 2021-01-26 浪潮云信息技术股份公司 一种内存数据库kv存储引擎索引的创建方法
CN112784120A (zh) * 2021-01-25 2021-05-11 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法
CN112765181A (zh) * 2021-01-27 2021-05-07 东北大学 一种基于区块索引结构的数据溯源查询方法

Also Published As

Publication number Publication date
CN113626433A (zh) 2021-11-09

Similar Documents

Publication Publication Date Title
Gonnet et al. New Indices for Text: Pat Trees and Pat Arrays.
JP5858432B2 (ja) 分散連想メモリベースを提供する方法、システム、及びコンピュータプログラム製品
Jose et al. Exploring the merits of nosql: A study based on mongodb
CN105975587B (zh) 一种高性能的内存数据库索引组织与访问方法
Jannink Implementing deletion in B+-trees
CN110888886B (zh) 一种索引结构及构建方法、键值存储系统及请求处理方法
CN105320775A (zh) 数据的存取方法和装置
JP2002501256A (ja) データベース装置
Wagner Indexing design considerations
CN112486994B (zh) 一种基于日志结构合并树的键值存储的数据快速读取方法
WO2001033436A1 (en) System for managing rdbm fragmentations
CN112269786B (zh) 一种内存数据库kv存储引擎索引的创建方法
CN113626433B (zh) 一种基于两层art树的数据存储方法
US7499927B2 (en) Techniques for improving memory access patterns in tree-based data index structures
Ramamohanarao et al. Recursive linear hashing
CN110597805B (zh) 一种内存索引结构处理方法
CN114722139A (zh) 可自适应动态伸缩的时空多属性索引方法及其检索方法
Jensen et al. Optimality in external memory hashing
Diehr et al. Optimal pagination of B-trees with variable-length items
Gonnet et al. Lexicographical indices for text: Inverted les vs pat trees
WO2001025962A1 (en) Database organization for increasing performance by splitting tables
Afshani et al. Cross-referenced dictionaries and the limits of write optimization
CN113688130B (zh) 一种内存数据库存储引擎管理方法
CN116881243A (zh) 基于时间序列数据特征的学习型索引方法及系统
KR100944756B1 (ko) 대용량 레파지토리 구성을 위한 데이터 저장 구조

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
TA01 Transfer of patent application right

Effective date of registration: 20221226

Address after: Room 305-22, Building 2, No. 1158 Zhangdong Road and No. 1059 Dangui Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 200120

Applicant after: Shanghai Yunxi Technology Co.,Ltd.

Address before: 250100 No. 1036 Tidal Road, Jinan High-tech Zone, Shandong Province, S01 Building, Tidal Science Park

Applicant before: Inspur cloud Information Technology Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant