CN110597805A - 一种高效的新型内存索引结构处理方法 - Google Patents
一种高效的新型内存索引结构处理方法 Download PDFInfo
- Publication number
- CN110597805A CN110597805A CN201910672625.5A CN201910672625A CN110597805A CN 110597805 A CN110597805 A CN 110597805A CN 201910672625 A CN201910672625 A CN 201910672625A CN 110597805 A CN110597805 A CN 110597805A
- Authority
- CN
- China
- Prior art keywords
- sentinel
- skip list
- nodes
- data
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种高效的新型内存索引结构处理方法。在跳表处理前,通过统计信息计算查询分布以及数据分布情况;选择插入跳表结构的哨兵节点;通过求解跳表在插入节点后的最小平均操作代价,得到最优的哨兵节点的配置结果;在底层跳表结构中插入这些哨兵节点,接着在底层跳表结构中的哨兵节点插入完毕后,通过Bulkload方法自底向上建立上层CSB+树结构,对哨兵节点的快速定位;对于每一条需要查询或者插入的数据,通过上层CSB+树结构,找到最近哨兵节点,从此开始对跳表进行操作。本发明方法在保留传统跳表结构实现简单、并发性好、适合范围查询等优势的基础上,提升了整个操作过程对缓存的利用率,从而明显提升了内存索引的性能。
Description
技术领域
本发明涉及内存数据库,存储策略,跳表结构,缓存利用率等方法。尤其涉及一种高效的新型内存索引结构处理方法。
背景技术
内存数据库(MMDB)是近年来发展较为迅速的一种数据技术。由于目前互联网技术以及大数据的发展,对于数据的响应速率提出了越来越高的要求,传统的磁盘数据库已经无法满足一些新型业务的要求,同时硬件技术的发展降低了内存的制造成本,为内存数据库提供了可行性。
索引机制是数据库管理机制的重要组成部分。当前内存索引结构主要有B+树、哈希表和跳表等。其中在哈希表上只能做单个key的查询,不适宜做范围查询。跳表结构实现简单、并发性好、适合范围查询,但对缓存利用率较差。而平衡树尽管插入和删除操作都有可能引发子树的调整,操作复杂,实现难度较高。
CSB+-Tree(CacheSensitive B+-Trees)是B+树的变体,连续存储给定节点的子节点,并且只存储节点的第一个子节点的地址,其他子节点的地址可以通过相对这个子节点的偏移量计算获得。同时,对于静态数据,CSB+-Tree可自底向上快速建立索引。但是其实现难度,操作复杂,范围查询需要进行遍历的问题明显存在。
发明内容
本发明的目的在于针对现有技术的不足,提供一种高效的新型内存索引结构处理方法,结合了现有跳表灵活度高和CSB+-Tree结构缓存利用率高的优势。
本发明解决其技术问题采用的技术方案的方法步骤如下:
(1)在跳表处理前,通过统计信息计算查询分布以及数据分布情况;
(2)选择插入跳表结构的用于快速定位的哨兵节点;在确定哨兵节点数量的前提下,通过求解跳表在插入节点后的最小平均操作代价,得到最优的哨兵节点的配置结果;当数据分布和查询分布一致时,保持相邻哨兵节点之间的两两查询分布和数据分布概率相同时候,跳表每次操作的平均代价达到最小值即形成最小平均操作代价;通过数学模型可在确定哨兵节点数量的前提下,选择能够使得内存索引结构性能最优的哨兵节点。
(3)根据哨兵节点的选择,在底层跳表结构中插入这些哨兵节点,接着在底层跳表结构中的哨兵节点插入完毕后,通过Bulkload方法自底向上在跳表结构之上建立上层的CSB+树(CSB+-Tree)结构,对哨兵节点的快速定位。鉴于CSB+树结构只用于哨兵节点定位,在底层跳表查询过程中保持不变,因此无需考虑复杂的子树调整过程,既能保证高并发性,也保证了较高的缓存利用率。
(4)对于每一条需要查询或者插入的数据,通过上层的CSB+树结构,找到最近的哨兵节点,从该哨兵节点开始对跳表进行操作。
由此,本发明只是改变了底层跳表结构的查询入口,而哨兵节点和跟现有跳表结构查询入口一样,在跳表中处于最高的高度,具体插入、删除和查询功能依旧可以保持现有跳表结构的灵活性,从而使得整个操作过程依然具有高度的并发性和灵活性。
所述步骤(1)具体是将内存内的数据划分为若干个分段,统计记录每个分段内的查询分布以及数据分布概率。
所述的哨兵节点在跳表中均具有最高的高度。
所述的哨兵节点插入位置为数据分段之间的分界位置。
本发明设计了一种两层索引结构处理,上层使用缓存利用率极高的CSB+树结构用于快速定位,下层使用跳表结构用于具体插入,删除和查询操作。这样本发明方法在保留传统跳表结构实现简单、并发性好、适合范围查询等优势的基础上,提升了整个操作过程对缓存的利用率,从而明显提升了内存索引的性能。
本发明技术方案通过CSB+-Tree作为上层结构,每个节点只需只存储一个子节点的指针,所有子节点的数据以连续存储的形式进行存放,通过偏移量进行查询,在保留跳表结构实现简单、并发性好、适合范围查询的基础上,大幅提升了缓存利用率,从而提高了算法效率。
(3)本发明具有的有益效果是:本发明对500w数据进行插入/查询效率实验,结果表明本发明的新型索引结构相对于传统跳表结构,插入效率提升了57%,而查询效率提高了54%。
本发明综合了CSB+-Tree对缓存的高效利用率,以及跳表结构实现简单、并发性好、适合范围查询的优势,提出了一种高效的新型内存索引结构处理方法,在保留传统跳表结构优点的基础上,明显提升了内存索引的性能。
附图说明
图1是本发明实施步骤流程图。
图2是本发明的哨兵节点构建图。
图3是本发明的CSB+-Tree构建图。
图4是本发明设计的内存索引结构使用流程图。
图5是本发明用于数据统计的跳表样例图。
图6是本发明中CSB+-Tree构建后,跳表未插入数据时的新型索引结构的示意图。
图7是本发明演示基于新型索引结构进行查询的示意图。
具体实施方式
现结合具体实施和示例对本发明的技术方案作进一步说明。
如图1,本发明具体实施过程和工作原理如下:
本发明具体实施可针对文字、字符串的文字型数据,例如网站后台的用户注册数据、专利查询等信息对象的统计类目存储数据。
(1)在跳表处理前,通过统计信息计算查询分布以及数据分布情况。内存数据集的数据分布和查询分布较为稳定,通过统计方法可以获取数据分布以及查询分布。具体将内存内的数据均匀划分为若干个分段,统计记录每个分段内的查询分布以及数据分布。例如对于图5的跳表数据,如果把数据以10为间距划分分段,则分段为(0,10],(10,20],(20,30],(30,40],……可得数据分布为(4,3,3,4,……)。
(2)如图1所示,选择插入跳表结构的哨兵节点。
哨兵节点插入位置为数据分段之间的分界位置,在确定哨兵节点数量的前提下,通过求解跳表在插入节点后的最小平均操作代价,得到最优的哨兵节点的配置结果;当数据分布和查询分布一致时,保持相邻哨兵节点之间的两两查询分布和数据分布相同的时候,跳表每次操作的平均代价达到最小值即形成最小平均操作代价。
鉴于哨兵节点数量通常设置为2的次幂形式,则只需重复如下操作即可得到哨兵节点的最优插入位置:
a)在整体分布的两端设置哨兵节点;
b)在相邻哨兵节点间插入新的哨兵节点,使得该新插入的哨兵节点两侧分布相同;
c)重复b步骤直到完成所有哨兵节点位置的确定。
对于图5的跳表分布数据,假定已知在数据分段40的位置有一个哨兵节点,而(0,40]间需要插入一个哨兵节点,则选择在分段20的位置插入哨兵节点,因为(0,20],(20,40]的数据分段内都是7个节点,分布相同。
(4)根据既定的哨兵节点的选择,在底层跳表结构中插入这些哨兵节点,哨兵节点在跳表中均具有最高的高度,能保证性能提升的稳定性;接着在底层跳表结构中的哨兵节点插入完毕后,如图2所示,通过Bulkload方法自底向上在跳表结构之上逐层建立上层的CSB+树(CSB+-Tree)结构。具体步骤如下:
a)为所有叶条目分配空间。
b)计算更高级别中需要多少个节点,为该级别中的所有节点分配连续的空间块。
c)通过复制较低级别中每个节点中的最大值来进入较高级别的节点条目。
d)还在每个更高级别的节点中设置了第一个子指针。
e)重复b,c,d过程,直到较高级别只有一个节点,并且把该节点指定为根节点。
由于同一级别中的所有节点在创建时都是连续的,因此不必进行任何额外的复制来形成节点组。直到对哨兵节点的快速定位;形成了上层CSB+树结构快速定位、下层跳表结构插入、删除和查询操作的两层索引结构;鉴于此时尚未开始数据的插入,查询或删除操作,索引结构如图6所示,底层跳表中只有哨兵节点。
(5)对于每一条需要查询或者插入的数据,如图3所示,通过上层的CSB+树结构,找到最近的哨兵节点,从而无需从头开始遍历整个跳表,而是可以从该哨兵节点开始对跳表进行操作。例如,对于图7中的索引结构,如果现在要查询25对应的数据,则可以先通过上层CSB+树结构找到最近的哨兵节点20,然后直接从哨兵节点20进行查询,而无需从头开始遍历整个跳表。
(6)总体上,对500w数据进行插入/查询效率实验,结果表明本发明的新型索引结构相对于传统跳表结构,插入效率提升了57%,而查询效率提高了54%。
Claims (4)
1.一种高效的新型内存索引结构处理方法,方法采用跳表结构作为基础,其特征在于:方法的步骤如下:
(1)在跳表处理前,通过统计信息计算查询分布以及数据分布情况;
(2)在确定哨兵节点数量的前提下,通过求解跳表在插入节点后的最小平均操作代价,得到最优的哨兵节点的配置结果;当数据分布和查询分布一致时,保持相邻哨兵节点之间的两两查询分布和数据分布概率相同时候,跳表每次操作的平均代价达到最小值即形成最小平均操作代价;
(3)根据哨兵节点的选择,在底层跳表结构中插入这些哨兵节点,接着在底层跳表结构中的哨兵节点插入完毕后,通过Bulkload方法自底向上建立上层的CSB+树结构,对哨兵节点的快速定位;
(4)对于每一条需要查询或者插入的数据,通过上层的CSB+树结构,找到最近的哨兵节点,从该哨兵节点开始对跳表进行操作。
2.根据权利要求1所述的一种高效的新型内存索引结构处理方法,其特征在于:所述步骤(1)具体是将内存内的数据划分为若干个分段,统计记录每个分段内的查询分布以及数据分布概率。
3.根据权利要求1所述的一种高效的新型内存索引结构处理方法,其特征在于:所述的哨兵节点在跳表中均具有最高的高度。
4.根据权利要求1所述的一种高效的新型内存索引结构处理方法,其特征在于:所述的哨兵节点插入位置为数据分段之间的分界位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910672625.5A CN110597805B (zh) | 2019-07-24 | 2019-07-24 | 一种内存索引结构处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910672625.5A CN110597805B (zh) | 2019-07-24 | 2019-07-24 | 一种内存索引结构处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597805A true CN110597805A (zh) | 2019-12-20 |
CN110597805B CN110597805B (zh) | 2022-04-12 |
Family
ID=68853053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910672625.5A Active CN110597805B (zh) | 2019-07-24 | 2019-07-24 | 一种内存索引结构处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597805B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309258A (zh) * | 2020-02-14 | 2020-06-19 | 苏州浪潮智能科技有限公司 | 一种b+树的存取方法、装置和计算机可读存储介质 |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104899297A (zh) * | 2015-06-08 | 2015-09-09 | 南京航空航天大学 | 具有存储感知的混合索引结构 |
CN106649790A (zh) * | 2016-12-28 | 2017-05-10 | 华中科技大学 | 一种多层链接分离的skiplist构造方法及系统 |
US20180150337A1 (en) * | 2015-07-20 | 2018-05-31 | Oracle International Corporation | System and method for multidimensional search with a resource pool in a computing environment |
-
2019
- 2019-07-24 CN CN201910672625.5A patent/CN110597805B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104899297A (zh) * | 2015-06-08 | 2015-09-09 | 南京航空航天大学 | 具有存储感知的混合索引结构 |
US20180150337A1 (en) * | 2015-07-20 | 2018-05-31 | Oracle International Corporation | System and method for multidimensional search with a resource pool in a computing environment |
CN106649790A (zh) * | 2016-12-28 | 2017-05-10 | 华中科技大学 | 一种多层链接分离的skiplist构造方法及系统 |
Non-Patent Citations (2)
Title |
---|
STEFAN SPRENGER等: "Cache-Sensitive Skip List: Efficient Range Queries on modern CPUs", 《LECTURE NOTES IN COMPUTER SCIENCE》 * |
董云云: "多维数据索引架构研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309258A (zh) * | 2020-02-14 | 2020-06-19 | 苏州浪潮智能科技有限公司 | 一种b+树的存取方法、装置和计算机可读存储介质 |
US11762827B2 (en) | 2020-02-14 | 2023-09-19 | Inspur Suzhou Intelligent Technology Co., Ltd. | B-plus tree access method and apparatus, and computer-readable storage medium |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
CN111475508B (zh) * | 2020-03-31 | 2022-05-03 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110597805B (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299113B (zh) | 具有存储感知的混合索引的范围查询方法 | |
CN104346357B (zh) | 一种嵌入式终端的文件存取方法及系统 | |
CN105320775B (zh) | 数据的存取方法和装置 | |
CN102521334B (zh) | 一种基于分类特性和平衡二叉树的数据存储、查询方法 | |
CN105975587B (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
CN110291518A (zh) | 合并树无用单元指标 | |
CN103823865A (zh) | 一种数据库主存索引方法 | |
CN110825733B (zh) | 一种面向多采样流的时间序列数据管理方法及系统 | |
CN110888886B (zh) | 一种索引结构及构建方法、键值存储系统及请求处理方法 | |
CN104199860B (zh) | 一种基于二维地理位置信息的数据集分片方法 | |
CN109255055A (zh) | 一种基于分组关联表的图数据存取方法和装置 | |
CN103488710B (zh) | 大数据页中高效存储非定长数据方法 | |
CN110597805B (zh) | 一种内存索引结构处理方法 | |
CN112395288B (zh) | 基于希尔伯特曲线的r树索引合并更新方法、装置及介质 | |
US6745198B1 (en) | Parallel spatial join index | |
CN112148680B (zh) | 一种基于分布式图数据库的文件系统元数据管理方法 | |
CN111639075A (zh) | 一种基于扁平化r树的非关系数据库矢量数据管理方法 | |
CN110928882A (zh) | 一种基于改进红黑树的内存数据库索引方法及系统 | |
CN106326040A (zh) | 一种快照元数据管理方法和装置 | |
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 | |
CN115718819A (zh) | 一种索引构建方法、数据读取方法及索引构建装置 | |
CN103399915A (zh) | 一种搜索引擎索引文件的优化读取方法 | |
CN113704248B (zh) | 一种基于外置索引的区块链查询优化方法 | |
CN117573676A (zh) | 基于存储系统的地址处理方法、装置、存储系统及介质 | |
CN111190545B (zh) | 一种基于软件实现的trie结构进行LPM规则压缩存储的方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |