CN112667644A - 一种混合索引内存数据库存储引擎管理方法 - Google Patents
一种混合索引内存数据库存储引擎管理方法 Download PDFInfo
- Publication number
- CN112667644A CN112667644A CN202110073103.0A CN202110073103A CN112667644A CN 112667644 A CN112667644 A CN 112667644A CN 202110073103 A CN202110073103 A CN 202110073103A CN 112667644 A CN112667644 A CN 112667644A
- Authority
- CN
- China
- Prior art keywords
- index
- memtable
- data
- tree
- key
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种混合索引内存数据库存储引擎管理方法,所述方法基于rocksdb存储引擎的MemTable管理机制,在memtable内部shiplist索引结构基础之上,添加B+Tree/Trie全局索引,用于Key‑Value的查询。本发明优化现有分布式NewSQL数据库中基于rocksdb存储引擎读写性能问题,充分发挥了内存的高效读写性能,可以在内存结构中缓存更多的数据,延迟并且减少落盘数据量,优化LSM结构的读写放大问题,支持冷热数据分区,当到达落盘阈值时,冷数据落盘,优化数据访问效率;可配置的内存使用量、落盘阈值设定、索引结构选择,用户可根据个性化需求灵活配置。
Description
技术领域
本发明涉及数据库存储引擎技术领域,具体提供一种混合索引内存数据库存储引擎管理方法。
背景技术
Rocksdb是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为Key-Value记录就是按照Key来排序的。主要的三个组成部分,内存结构memtable,类似事务日志角色的WAL文件,持久化的SST文件。
如图1所示,当Memtable写入到达阈值之后,转化为immutable memTable,加入flush队列等待flush线程写入SST文件持久化。
Rocksdb中memtable转换城immutable memtable后,flush线程很快的进行SST文件写入操作,而LSM-Tree的分层结构Compaction机制会出现写入数据的读写放大,大大影响了存储引擎的读写效率。而多个immutable memtable等待统一SST写入,对于查询又不友好,十分耗费CPU资源。
注:MemTable和Immutable MemTable两者都位于内存,属于内存的数据结构,它俩之间是一样的数据结构,两者的区别在于MemTable可读可写,而Immutable MemTable是只读的,不允许写入。MemTable承接来自客户的key-value请求,当写入的数据占用内存到指定门限,就会自动转成Immutable Memtable,等待Dump到磁盘中,同时Rocksdb会产生新的MemTable供写操作写入新的key-value pair。
发明内容
本发明目的是为了优化现有分布式NewSQL数据库中基于rocksdb存储引擎读写性能问题。
本发明为了优化现有分布式NewSQL数据库中基于rocksdb存储引擎读写性能问题,提供一种混合索引内存数据库存储引擎管理方法。
为实现上述目的,本发明提供了如下技术方案:
一种混合索引内存数据库存储引擎管理方法,所述方法基于rocksdb存储引擎的MemTable管理机制,在memtable内部shiplist索引结构基础之上,添加B+Tree/Trie全局索引,用于Key-Value的查询。
所述方法通过设置多个MemTable统一延迟落盘,使冷热数据分区管理。
所述方法的实现包括内容如下:
1)写入数据从Memtable转换为immutable memtable后,将其加入B+tree/trie索引中;
2)启动后台线程定时对写入immutable memtable的数据进行Compaction压缩操作,以进行资源的回收;
3)设定内存阈值,将写入数据按冷热数据划分,当写入immutable memtable的数据到达设定内存阈值,作为冷数据写入SST flush到磁盘。
所述冷数据采取定时落盘方式,保证数据落盘次数尽量减少,减少磁盘压缩次数。
所述方法的实现还包括内容如下:
数据查询操作首先从memtable查询,然后查询B+tree/trie索引,最后查询SST。
即数据查询尽量在内存中完成,减少读取磁盘的时间。
所述方法的具体实现步骤包括:
1)新建一个B+tree索引维护类(可直接使用lmdb等开源代码),根据Key排序,value中保存memtable的value地址,支持PUT/GET,事务提交等功能和iterator查询功能;
2)索引初始化:
在MemtableListVersion中增加所述B+tree索引句柄,用于索引操作;
3)索引创建:
在后台BGFlush线程操作函数MemtableList::PickMemtablesToFlush中判断current_->memlist_队列(该队列中存储的是immutable memtable)中已添加索引memtable数量是否达到预设的Flush阈值:
未达到预设的Flush阈值,把memlist_队列中未加入索引的memtable添加索引;
达到预设的Flush阈值,进行原Flush逻辑操作。
所述索引添加过程包括内容如下:
调用memtable::NewIterator接口创建Iterator;
通过所述Iterator遍历该memtable中的所有key-value项item;
依次调用B+tree索引的Put接口,将Key及value地址保存到B+tree索引中。
所述索引查询过程包括内容如下:
在MemtableListVersion::GetFromList中,首先从memlist中未加入B+tree索引的memtable中查询,如果未查询到则从B+tree索引中查询该key;
在MemtableListVersion::AddIterators两个函数中,首先把memlist中未加入B+tree索引的memtable创建iterator,加入iteratorlist/加入mergeitertor,然后后使用B+tree索引句柄创建索引的iterator,加入iteratorlist/加入mergeitertor。
所述压缩操作的实现包括内容:
启动后台memcompaction线程,根据Immutable memtable的数量设定阈值;
当达到所设定的阈值,从memlist队列的队尾,使用mergeiterator进行多个memtable的压缩(Compaction)操作,生成新的memtable及WAL,更新B+tree索引;
原B+tree索引替换后,释放已废弃memtable。
所述冷热数据的计算包括内容如下:
在索引中key增加冷热数据计数器;
根据该key的每次查询,计数器以递增方式计算最近一段时间的访问率;
根据设定Flush时间或阈值,压缩(Compaction)时把热度低的key-value记录放到单独的memtable中;
Flush操作时优先选择热度比较低的memtable进行Flush操作,并更新B+tree索引。
与现有技术相比,本发明一种混合索引内存数据库存储引擎管理方法具有以下突出的有益效果:
本发明优化现有分布式NewSQL数据库中基于rocksdb存储引擎读写性能问题,充分发挥了内存的高效读写性能,可以在内存结构中缓存更多的数据,延迟并且减少落盘数据量,优化LSM结构的读写放大问题,支持冷热数据分区,当到达落盘阈值时,冷数据落盘,优化数据访问效率;可配置的内存使用量、落盘阈值设定、索引结构选择,用户可根据个性化需求灵活配置。
附图说明
图1是基于Rocksdb存储引擎管理示意图;
图2是本发明基于Rocksdb存储引擎管理示意图。
具体实施方式
下面将结合附图和实施例,对本发明作进一步详细说明。
一种混合索引内存数据库存储引擎管理方法,所述方法基于rocksdb存储引擎的MemTable管理机制,在memtable内部shiplist索引结构基础之上,添加B+Tree/Trie全局索引,用于Key-Value的查询,如图2所示,具体实现过程如下:
1、Memtable转换为immutable memtable后,将其加入B+tree/trie索引中。
2、启动后台线程定时对immutable memtable进行Compaction操作,以进行资源的回收。
3、增加冷热数据计算,当到达设定内存阈值,把冷数据写入SST flush到磁盘。
4、查询操作首先从memtable查询,然后查询B+tree/trie索引,最后查询SST。
所述方法详细设计方案如下:
新建一个B+tree索引维护类(可直接使用lmdb等开源代码),根据Key排序,value中保存memtable的value地址,支持PUT/GET,事务提交等功能,iterator查询功能等。
1、索引初始化:
MemtableListVersion中增加上述B+tree索引句柄,用于索引操作。
2、索引创建:
在后台BGFlush线程操作的函数MemtableList::PickMemtablesToFlush中判断current_->memlist_(该队列中存储的是immutable memtable)队列中已添加索引memtable数量是否达到预设Flush阈值,未达到阈值,把memlist_队列中未加入索引的memtable添加索引,达到阈值进行原Flush逻辑操作。
添加索引所及如下:
调用memtable::NewIterator接口创建Iterator,通过该Iterator遍历该memtable中的所有key-value item,依次调用B+tree索引Put接口,把该Key及value地址保存到B+tree索引中。
3、索引查询:
在MemtableListVersion::GetFromList中,首先从memlist中未加入B+tree索引的memtable中查询,如果未查询到则从B+tree中查询该key;
在MemtableListVersion::AddIterators(两个函数)中,首先把memlist中未加入B+tree索引的memtable创建iterator,加入iteratorlist(或加入mergeitertor),之后使用B+tree索引句柄创建索引的iterator,加入iteratorlist(或加入mergeitertor)。
4、Immutable memTable合并Compaction
启动后台memcompaction线程,根据memtable个数,当达到设定阈值,从memlist队列队尾,使用mergeiterator进行多个memtable的Compaction操作,生成新的memtable及WAL,更新B+tree,替换索引后释放已废弃memtable。
5、冷热数据计算
索引中key增加冷热数据计数器,每次查询该key计数器递增(计算最近一段时间的访问率),根据设定Flush时间或到达阈值,Compaction时把热度低的key-value记录放到单独的memtable中,Flush操作时优先选择热度比较低的memtable进行Flush操作,并且更新B+tree。
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (10)
1.一种混合索引内存数据库存储引擎管理方法,其特征在于,所述方法基于rocksdb存储引擎的MemTable管理机制,在memtable内部shiplist索引结构基础之上,添加B+Tree/Trie全局索引,用于Key-Value的查询。
2.根据权利要求1所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述方法通过设置多个MemTable统一延迟落盘,使冷热数据分区管理。
3.根据权利要求1所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述方法的实现包括内容如下:
1)写入数据从Memtable转换为immutable memtable后,将其加入B+tree/trie索引中;
2)启动后台线程定时对写入immutable memtable的数据进行压缩操作,以进行资源的回收;
3)设定内存阈值,将写入数据按冷热数据划分,当写入immutable memtable的数据到达设定内存阈值,作为冷数据写入SST flush到磁盘。
4.根据权利要求1所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述冷数据采取定时落盘方式,保证数据落盘次数减少,减少磁盘压缩次数。
5.根据权利要求3所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述方法的实现还包括内容如下:
数据查询操作首先从memtable查询,然后查询B+tree/trie索引,最后查询SST。
6.根据权利要求1所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述方法的具体实现步骤包括:
1)新建一个B+tree索引维护类,根据Key排序,value中保存memtable的value地址,支持PUT/GET,事务提交等功能和iterator查询功能;
2)索引初始化:
在MemtableListVersion中增加所述B+tree索引句柄,用于索引操作;
3)索引创建:
在后台BGFlush线程操作函数MemtableList::PickMemtablesToFlush中判断current_->memlist_队列中已添加索引memtable数量是否达到预设的Flush阈值:
未达到预设的Flush阈值,把memlist_队列中未加入索引的memtable添加索引;
达到预设的Flush阈值,进行原Flush逻辑操作。
7.根据权利要求6所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述索引添加过程包括内容如下:
调用memtable::NewIterator接口创建Iterator;
通过所述Iterator遍历该memtable中的所有key-value项item;
依次调用B+tree索引的Put接口,将Key及value地址保存到B+tree索引中。
8.根据权利要求5所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述索引查询过程包括内容如下:
在MemtableListVersion::GetFromList中,首先从memlist中未加入B+tree索引的memtable中查询,如果未查询到则从B+tree索引中查询该key;
在MemtableListVersion::AddIterators两个函数中,首先把memlist中未加入B+tree索引的memtable创建iterator,加入iteratorlist/加入mergeitertor,然后后使用B+tree索引句柄创建索引的iterator,加入iteratorlist/加入mergeitertor。
9.根据权利要求3所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述压缩操作的实现包括内容:
启动后台memcompaction线程,根据Immutable memtable的数量设定阈值;
当达到所设定的阈值,从memlist队列的队尾,使用mergeiterator进行多个memtable的压缩操作,生成新的memtable及WAL,更新B+tree索引;
原B+tree索引替换后,释放已废弃memtable。
10.根据权利要求6所述的一种混合索引内存数据库存储引擎管理方法,其特征在于,所述冷热数据的计算包括内容如下:
在索引中key增加冷热数据计数器;
根据该key的每次查询,计数器以递增方式计算最近一段时间的访问率;
根据设定Flush时间或阈值,压缩时把热度低的key-value记录放到单独的memtable中;
Flush操作时优先选择热度比较低的memtable进行Flush操作,并更新B+tree索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110073103.0A CN112667644B (zh) | 2021-01-20 | 2021-01-20 | 一种混合索引内存数据库存储引擎管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110073103.0A CN112667644B (zh) | 2021-01-20 | 2021-01-20 | 一种混合索引内存数据库存储引擎管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112667644A true CN112667644A (zh) | 2021-04-16 |
CN112667644B CN112667644B (zh) | 2023-02-21 |
Family
ID=75415782
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110073103.0A Active CN112667644B (zh) | 2021-01-20 | 2021-01-20 | 一种混合索引内存数据库存储引擎管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667644B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113688099A (zh) * | 2021-08-09 | 2021-11-23 | 浪潮云信息技术股份公司 | 基于spdk的数据库存储引擎加速方法及系统 |
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
CN116150263A (zh) * | 2022-10-11 | 2023-05-23 | 中国兵器工业计算机应用技术研究所 | 一种分布式图计算引擎 |
CN116644086A (zh) * | 2023-05-24 | 2023-08-25 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
CN116775621A (zh) * | 2023-08-23 | 2023-09-19 | 北京遥感设备研究所 | 一种基于索引选择性的数据库智能索引优化方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045891A (zh) * | 2015-07-31 | 2015-11-11 | 中国科学院计算技术研究所 | 提高顺序表性能方法、系统、架构、优化方法及存储装置 |
CN107967122A (zh) * | 2017-11-22 | 2018-04-27 | 郑州云海信息技术有限公司 | 一种块设备的数据写入方法、装置及介质 |
CN108628542A (zh) * | 2017-03-22 | 2018-10-09 | 华为技术有限公司 | 一种文件合并方法及控制器 |
US20180365236A1 (en) * | 2017-06-20 | 2018-12-20 | Vmware, Inc. | Supporting file system clones in any ordered key-value store using inode back pointers |
WO2019156309A1 (ko) * | 2018-02-09 | 2019-08-15 | 연세대학교 산학협력단 | 플래시 저장장치의 내부 병렬성을 이용하는 키 값 기반의 데이터 액세스 장치 및 방법 |
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
CN110825794A (zh) * | 2018-08-14 | 2020-02-21 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
-
2021
- 2021-01-20 CN CN202110073103.0A patent/CN112667644B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045891A (zh) * | 2015-07-31 | 2015-11-11 | 中国科学院计算技术研究所 | 提高顺序表性能方法、系统、架构、优化方法及存储装置 |
CN108628542A (zh) * | 2017-03-22 | 2018-10-09 | 华为技术有限公司 | 一种文件合并方法及控制器 |
US20180365236A1 (en) * | 2017-06-20 | 2018-12-20 | Vmware, Inc. | Supporting file system clones in any ordered key-value store using inode back pointers |
CN107967122A (zh) * | 2017-11-22 | 2018-04-27 | 郑州云海信息技术有限公司 | 一种块设备的数据写入方法、装置及介质 |
WO2019156309A1 (ko) * | 2018-02-09 | 2019-08-15 | 연세대학교 산학협력단 | 플래시 저장장치의 내부 병렬성을 이용하는 키 값 기반의 데이터 액세스 장치 및 방법 |
CN110825794A (zh) * | 2018-08-14 | 2020-02-21 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
Non-Patent Citations (2)
Title |
---|
FOCUS: "LevelDB完全解析1:memtable", 《知乎》 * |
OLZHAS KAIYRAKHMET: "SLM-DB: Single-Level Key-Value Store with Persistent Memory", 《17TH {USENIX} CONFERENCE ON FILE AND STORAGE TECHNOLOGIES 》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
CN113688130B (zh) * | 2021-08-05 | 2023-10-13 | 上海沄熹科技有限公司 | 一种内存数据库存储引擎管理方法 |
CN113688099A (zh) * | 2021-08-09 | 2021-11-23 | 浪潮云信息技术股份公司 | 基于spdk的数据库存储引擎加速方法及系统 |
CN113688099B (zh) * | 2021-08-09 | 2023-10-13 | 上海沄熹科技有限公司 | 基于spdk的数据库存储引擎加速方法及系统 |
CN116150263A (zh) * | 2022-10-11 | 2023-05-23 | 中国兵器工业计算机应用技术研究所 | 一种分布式图计算引擎 |
CN116150263B (zh) * | 2022-10-11 | 2023-07-25 | 中国兵器工业计算机应用技术研究所 | 一种分布式图计算引擎 |
CN116644086A (zh) * | 2023-05-24 | 2023-08-25 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
CN116644086B (zh) * | 2023-05-24 | 2024-02-20 | 上海沄熹科技有限公司 | 一种基于SST的Insert SQL语句实现方法 |
CN116775621A (zh) * | 2023-08-23 | 2023-09-19 | 北京遥感设备研究所 | 一种基于索引选择性的数据库智能索引优化方法 |
CN116775621B (zh) * | 2023-08-23 | 2024-01-02 | 北京遥感设备研究所 | 一种基于索引选择性的数据库智能索引优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112667644B (zh) | 2023-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667644B (zh) | 一种混合索引内存数据库存储引擎管理方法 | |
CN109213772B (zh) | 数据存储方法及NVMe存储系统 | |
CA2777425C (en) | Method for performing transactions on data and a transactional database | |
US9262458B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
CN104781812B (zh) | 策略驱动的数据放置和信息生命周期管理 | |
US20070124277A1 (en) | Index and Method for Extending and Querying Index | |
WO2019149261A1 (zh) | 分布式文件系统的文件存储方法及分布式文件系统 | |
CN113821171B (zh) | 一种基于哈希表与lsm树的键值存储方法 | |
CN104301360A (zh) | 一种日志数据记录的方法、日志服务器及系统 | |
CN103336849A (zh) | 一种数据库检索系统中提高检索速度的方法及装置 | |
KR20170024039A (ko) | 유연한 스키마를 사용한 데이터 관리 | |
CN110309233A (zh) | 数据存储的方法、装置、服务器和存储介质 | |
WO2011130706A2 (en) | Methods and systems for performing cross store joins in a multi-tenant store | |
CN103176754A (zh) | 一种海量小文件读取存储方法 | |
Chai et al. | LDC: a lower-level driven compaction method to optimize SSD-oriented key-value stores | |
WO2023116079A1 (zh) | 基于区块链的交易冲突检测方法、装置、设备和存储介质 | |
CN110287152A (zh) | 一种数据管理的方法以及相关装置 | |
Santos et al. | Optimizing data warehouse loading procedures for enabling useful-time data warehousing | |
CN109828975A (zh) | 一种基于区块链的大规模快速账本存取系统 | |
KR101806394B1 (ko) | 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
CN112732725B (zh) | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 | |
CN113934713A (zh) | 一种订单数据索引方法、系统、计算机设备以及存储介质 | |
CN109299143A (zh) | 基于Redis缓存的数据互操作测试知识库的知识快速索引方法 | |
CN107273443B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |