CN113626433B - 一种基于两层art树的数据存储方法 - Google Patents
一种基于两层art树的数据存储方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 238000013500 data storage Methods 0.000 title claims abstract description 15
- 238000005192 partition Methods 0.000 claims abstract description 146
- 238000004364 calculation method Methods 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 9
- 230000037431 insertion Effects 0.000 claims description 9
- 230000009191 jumping Effects 0.000 claims description 6
- 230000001174 ascending effect Effects 0.000 claims description 3
- 238000000638 solvent extraction Methods 0.000 abstract description 4
- 230000003044 adaptive effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/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
- 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/2453—Query 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(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,即范围分区最大数据量阈值;当某个范围分区数据量超过范围分区最大数据量阈值时,将该范围分区拆解成两个。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328598B (zh) * | 2021-11-29 | 2024-06-11 | 上海沄熹科技有限公司 | 基于ClickHouse数据库的pipeline的缓存优化方法及系统 |
Citations (6)
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内存数据库存储管理方法 |
-
2021
- 2021-08-03 CN CN202110884247.4A patent/CN113626433B/zh active Active
Patent Citations (6)
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 |