一种基于范围分片方式的KV内存数据库存储管理方法技术

技术编号:28420317 阅读:18 留言:0更新日期:2021-05-11 18:27
本发明专利技术公开了一种基于范围分片方式的KV内存数据库存储管理方法,属于内存数据库技术领域。本发明专利技术的基于范围分片方式的KV内存数据库存储管理方法包括以下步骤:S1、数据库启动时,创建第一个范围存储区,并启动一个后台线程,顺序从待处理队列中取出范围存储区,判断需要扩容、拆分或缩减,并调用相应的算法进行处理;S2、数据库插入数据时,使用新KV数据插入算法将数据插入某个范围存储区后;S3、数据库删除数据时,使用KV数据删除算法将数据删除后,判断该范围存储区是否需要缩减。该发明专利技术的基于范围分片方式的KV内存数据库存储管理方法能够提升CPU缓存命中率,减少内存空间重构的次数,具有很好的推广应用价值。

【技术实现步骤摘要】
一种基于范围分片方式的KV内存数据库存储管理方法
本专利技术涉及内存数据库
,具体提供一种基于范围分片方式的KV内存数据库存储管理方法。
技术介绍
近年来,随着动态随机存储器(DRAM)容量的上升和单位价格的下降,使大量数据在内存中的存储和处理成为可能。内存数据库(MMDB:MainMemoryDatabase,也叫主存数据库),就是将数据全部或者大部分放在内存中进行操作的数据库管理系统。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。KV内存数据库指存储KEY-VALUE类型数据的内存数据库。现有内存数据库存储方式是将分配的空间内分页,每页内顺序写入,没有范围分区的概念和机制。为节省内存空间的开销,使用锁机制实现事务的隔离级别。锁机制将临界资源的并发访问变成串行顺序访问,从而降低访问性能。
技术实现思路
本专利技术的技术任务是针对上述存在的问题,提供一种能够提升CPU缓存命中率,减少内存空间重构的次数,并能提升内存访问吞吐率的基于范围分片方式的KV内存数据库存储管理方法。为实现上述目的,本专利技术提供了如下技术方案:一种基于范围分片方式的KV内存数据库存储管理方法,包括以下步骤:S1、数据库启动时,创建第一个范围存储区,并启动一个后台线程,顺序从待处理队列中取出范围存储区,判断需要扩容、拆分或缩减,并调用相应的算法进行处理;S2、数据库插入数据时,使用新KV数据插入算法将数据插入某个范围存储区后,判断该范围存储区是否需要扩容或拆解,若需要则将该范围存储区放入待处理队列中;S3、数据库删除数据时,使用KV数据删除算法将数据删除后,判断该范围存储区是否需要缩减,若需要则将该范围存储区放入待处理队列中。范围存储区为存储key值某个范围空间数据的内存空间区域,范围存储区空间分为四个部分:1)SortedKV:范围存储区拆解成两个或重构时,每个范围存储区分配的KV数据存放的空间;2)ReservedKV:预留的内存空间,用于存储新插入的KV数据;3)KVlist:KV数据指针列表,当reservedKV空间不足时,新插入的数据在堆中分配空间,并将指针存入列表内;4)TmpKVlist:临时数据指针列表,当范围存储区正在重构时,需要将这段期间新插入的KV数据存放在该临时链表中,以便重构后处理这些数据。其中,SortedKV和ReservedKV的内存空间是连续的,是同一个内存空间,该内存空间的前部分存储SortedKV,后部分存储新插入的KV数据。范围存储区具备的属性(1)最大空间CURRENT_MEM_BLOCK_MAX_SIZE,每次创建范围存储区时计算生成。计算规则为:CURRENT_MEM_BLOCK_MAX_SIZE=SortedKV空间大小×(1+MEM_BLOCK_KV_LIST_PER+MEM_BLOCK_RESERVED_PER)。(2)内存块内存储的key键值的范围[START_KEY,END_KEY)。(3)已存储的KV数据的数据量CURRENT_STORE_SIZE。(4)标记删除的KV数据的数据量CURRENT_DEL_SIZE。(5)状态STATUS,有以下几种状态:正常、扩容中、拆解中、缩减中。范围存储区的空间最大阈值MEM_BLOCK_MAX_SIZE,每个范围存储区存储的KV数据数据量不能超过该值,超过则需要将范围存储区拆分成两个范围存储区。范围存储区预留空间比例MEM_BLOCK_RESERVED_PER,SortedKV空间与ReservedKV空间的比值。范围存储区外部存储空间比例MEM_BLOCK_KV_LIST_PER,SortedKV空间与KVpointlist空间的比值。范围存储区重构阈值MEM_BLOCK_DELETED_PER(内存块中已删除的数据量占比)。第一个范围存储区的范围为(MIN,MAX)。MIN常量表示key值空间中最小的key,取值为0x00。MAX常量表示key值空间中最大的key,取值为0xFF。作为优选,所述新KV数据插入算法包括以下过程:1)根据KV数据中的key值,从跳表中快速检索出对应的范围存储区;2)确认该范围存储区的状态是否为正常,若不正常则从内存堆中分配新的KV数据大小的内存空间,将KV数据复制到内存空间中,然后将内存空间的指针存入TmpKVlist中,然后退出;如果是正常状态,则进入下一步;3)确认范围存储区空间是否足够,若足够,则新KV数据存入ReservedKV中;如果不够,则从内存堆中分配新的KV数据大小的内存空间,将KV数据复制到内存空间中,然后将内存空间的指针存入KVlist中;4)修改当前范围存储区存储的所有KV数据总量值,增加新KV数据的数据量。跳表为一种内存索引结构,在本专利中用于快速检索key值对应的范围存储区。作为优选,所述KV数据删除算法包括以下过程:1)根据KV数据中的key值,从跳表中快速检索出对应的范围存储区;2)确认该范围存储区的状态是否为正常,如果不是正常状态,则跳到第一步;如果正常则进入下一步;3)将该KV数据的存储空间状态置为已删除,计算出该KV占用的存储空间,然后修改标记删除的KV数据的数据量值加上该KV数据的空间大小。作为优选,所述扩容算法包括以下过程:1)将该范围存储区的状态设置为扩容状态;2)将该范围存储区中所有正常KV数据按照key值进行排序,形成链表;3)创建新的范围存储区,key值范围与原范围存储区范围一致,状态为正常状态;4)迭代链表,将KV数据按照顺序写入到范围存储区SortedKV空间中,增加当前范围存储区存储的所有KV数据总量的数值;5)将新建范围存储区插入跳表中,用以快速索引出key值对应的范围存储区,并从跳表中删除旧的范围存取区;6)逐个处理原范围存储区内TmpKVlist内KV数据,插入到对应的新范围存储区中;7)删除旧的范围存储区占用的内存空间。作为优选,所述拆分算法包括以下过程:1)将该范围存储区的状态设置成拆解状态;2)将该范围存储区内的所有正常key值进行排序,形成排好序的KV数据链表;3)将KV数据链表分成两个链表,两个链表中KV数据的数据量相近,第二个链表首个key键值假设为MID_SPLIT_KEY;4)对每个链表创建对应的范围存储区;5)迭代链表,将KV数据按照顺序写入到范围存储区SortedKV空间中,增加当前范围存储区存储的所有KV数据总量的数值;6)将新建范围存储区插入跳表中,用以快速索引出key值对应的范围存储区,并从跳表中删除旧的范围存取区;7)逐个处理原范围存储区内TmpKVlist内KV数据,插入到对应的新范本文档来自技高网...

【技术保护点】
1.一种基于范围分片方式的KV内存数据库存储管理方法,其特征在于:包括以下步骤:/nS1、数据库启动时,创建第一个范围存储区,并启动一个后台线程,顺序从待处理队列中取出范围存储区,判断需要扩容、拆分或缩减,并调用相应的算法进行处理;/nS2、数据库插入数据时,使用新KV数据插入算法将数据插入某个范围存储区后,判断该范围存储区是否需要扩容或拆解,若需要则将该范围存储区放入待处理队列中;/nS3、数据库删除数据时,使用KV数据删除算法将数据删除后,判断该范围存储区是否需要缩减,若需要则将该范围存储区放入待处理队列中。/n

【技术特征摘要】
1.一种基于范围分片方式的KV内存数据库存储管理方法,其特征在于:包括以下步骤:
S1、数据库启动时,创建第一个范围存储区,并启动一个后台线程,顺序从待处理队列中取出范围存储区,判断需要扩容、拆分或缩减,并调用相应的算法进行处理;
S2、数据库插入数据时,使用新KV数据插入算法将数据插入某个范围存储区后,判断该范围存储区是否需要扩容或拆解,若需要则将该范围存储区放入待处理队列中;
S3、数据库删除数据时,使用KV数据删除算法将数据删除后,判断该范围存储区是否需要缩减,若需要则将该范围存储区放入待处理队列中。


2.根据权利要求1所述的基于范围分片方式的KV内存数据库存储管理方法,其特征在于:所述新KV数据插入算法包括以下过程:
1)根据KV数据中的key值,从跳表中快速检索出对应的范围存储区;
2)确认该范围存储区的状态是否为正常,若不正常则从内存堆中分配新的KV数据大小的内存空间,将KV数据复制到内存空间中,然后将内存空间的指针存入TmpKVlist中,然后退出;如果是正常状态,则进入下一步;
3)确认范围存储区空间是否足够,若足够,则新KV数据存入ReservedKV中;如果不够,则从内存堆中分配新的KV数据大小的内存空间,将KV数据复制到内存空间中,然后将内存空间的指针存入KVlist中;
4)修改当前范围存储区存储的所有KV数据总量值,增加新KV数据的数据量。


3.根据权利要求2所述的基于范围分片方式的KV内存数据库存储管理方法,其特征在于:所述KV数据删除算法包括以下过程:
1)根据KV数据中的key值,从跳表中快速检索出对应的范围存储区;
2)确认该范围存储区的状态是否为正常,如果不是正常状态,则跳到第一步;如果正常则进入下一步;
3)将该KV数据的存储空间状态置为已删除,计算出该KV占用的存储空间,然后修改标记删除的KV数据的数据量值加上该KV数据的空间大小。


4.根据权利要求3所述的基于范围分片方式的KV内存数据库存储管理方法,其特征在于:所述扩容算法包括以下过程:
1)将该范围存储区的状态设置为扩容状态;
2)将该范围存储区中所有正常KV数据按照key值进行排序,形成链表;
3)创建新的范围存储区,key值范围与原范围存储区范围一致,状态为正常状态;
4)迭代链表,将KV数据按照顺序写入到范围存储区SortedKV空间中,增加当前范围存储区存储的所有KV数据总量的数值;
5)将新建范围存储区插入跳表中,用以快速索引出key值对应的范围存储区,并从跳表中删除旧的范围存取区;
6)逐个处理原范围存储区内TmpKVlist内KV数据,插入到对应的新范围存储区...

【专利技术属性】
技术研发人员:梁波张晖于暄张炜刚孙思清
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1