一种数据存储方法及装置、电子设备及存储介质与流程

文档序号:36037292发布日期:2023-11-17 17:06阅读:29来源:国知局
一种数据存储方法及装置、电子设备及存储介质与流程

本发明涉及计算机数据存储,具体提供一种数据存储方法及装置、电子设备及存储介质。


背景技术:

1、b+树是一种树数据结构,通常用于数据库和操作系统的文件索引系统中。比如ntfs、reiserfs、nss、xfs、jfs、refs以及bfs等文件系统都在使用b+树作为元数据索引。b+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。b+树是一种平衡查找树,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接。

2、现有技术中,经典b+树本身是紧凑排序的,所以删除、更新、新增key都会发生叶子节点的变动,这样产生的问题是只要涉及到某个叶子节点,即使某些key不需要更新,其数据也需要拷贝到新的叶子节点,以保证数据的紧凑存储,这里会带来内存申请拷贝,及磁盘io操作。因为b+树是平衡的,在新增节点和删除节点时,会造成父节点的索引信息变更,平衡的计算是消耗cpu的,索引的更新是消耗内存和io的。因此,经典b+树在flush时,会写入和删除大量的key,flush消耗大量的cpu和磁盘io,这样导致经典b+树在flush时效率是受限,且消耗必要和非必要资源较高,且flush时间在整体数据库运行时间占比并不大,所以cpu的使用是不平滑有尖刺的。

3、相应地,本领域需要一种新的数据存储方案来解决上述问题。


技术实现思路

1、为了克服上述缺陷,提出了本发明,以提供解决或至少部分地解决使用现有的方法进行b+树的flush时,导致消耗大量的cpu和磁盘io的技术问题的数据存储方法及装置、电子设备及存储介质。

2、在第一方面,本发明提供一种数据存储方法,该数据存储方法包括:

3、构建数据库数据层,包含若干个分片page,每个分片page上存储完整的kv键值对数据;

4、构建数据库索引层,存储数据库数据层中存储的kv键值对数据的索引信息,所述的索引信息以树形结构存储,包括产生各个分片page的分裂key作为索引key,各个分裂key对应的分片page的id信息作为索引value。

5、在上述一种数据存储方法的一个技术方案中,所述的数据库数据层中每个分片page中包含增量更新文件和存储文件:

6、所述增量更新文件和存储文件均存储完整的kv键值对数据,且所述kv键值对数据中的key值是有序排列的;

7、所述增量更新文件和存储文件中的key值是存在重叠的,当增量更新文件和存储文件中同时存储同一key值,则优先读取增量更新文件,其次查找存储文件。

8、在上述一种数据存储方法的一个技术方案中,所述的数据库数据层中包含分片p1、分片p2、......、分片pn,分片p1上存储kv键值对数据包括(k11,v11)、(k12,v12)、......、(k1r,vlr),key值由k11至k1r有序增大,分片p2上存储kv键值对数据包括(k21,v21)、(k22,v22)、......、(k2s,v2s),key值由k21至k2s有序增大,分片pn上存储kv键值对数据包括(knl,vn1)、(kn2,vn2)、......、(knt,vnt),key值由kn1至knt有序增大,分片p1至分片pn中下一分片中的最小key大于上一分片中的最大key;

9、所述的数据库索引层中存储索引信息的索引key包括(k1r、k2s、......、knt),索引value包括(分片p1的id、分片p2的id、......、分片pn的id);

10、将写入key在数据库索引层中的索引信息中进行索引查找,判断写入key在索引key中的位置区间,根据位置区间确定索引value所对应的分片pn的id。

11、在上述一种数据存储方法的一个技术方案中,该数据存储方法包括数据写入流程:

12、针对内存表中的写入key值在数据库索引层中树形结构的索引信息中进行查找,得到索引value;

13、将内存表中写入key值对应的完整kv键值对数据写入索引value所对应分片page中的增量更新文件中。

14、在上述一种数据存储方法的一个技术方案中,所述增量更新文件中存储kv键值对数据、及其key值的前向指针和后向指针,所述前向指针是前向key值所在文件中的偏移量,所述后向指针是后向key值所在文件中的偏移量;

15、当进行写入key值对应的完整kv键值对数据写入时,通过二分查找得到对应的位置,更新写入key值的前向节点的指针,更新写入key值的指针,更新写入key值的后向节点的指针,通过指针可得到有序的key值列表。

16、在上述一种数据存储方法的一个技术方案中,该数据存储方法包括:

17、在将内存表中的数据写入数据库数据层中对应分片的增量更新文件过程中;

18、当内存表中的数据写入之后,增量更新文件的大小超过预设闪存阈值,则触发分页内部数据合并流程;

19、所述的分页内部数据合并流程将同一分页的增量更新文件与存储文件进行数据合并,增量更新文件中的所有数据被全部写入存储文件中,数据合并之后增量更新文件为空。

20、在上述一种数据存储方法的一个技术方案中,该数据存储方法包括:

21、当分页内部数据合并流程结束之后,判断存储文件的大小是否超过预设存储阈值;

22、若判断结果为是,则触发分页分裂流程:新创建第一分页和第二分页,对需要分裂的分页进行有序遍历,先写入到新创建的第一分页的存储文件中,写满第一分页后,写入到新创建的第二分页的存储文件到结束;这时得到第一分页/第二分页对应的最大key值,再将其更新到数据库索引层的索引信息中,需要分裂的分页所对应的索引信息被择时释放。

23、在第二方面,本发明提供一种数据存储装置,该数据存储装置包括:

24、数据库数据层模块,包含若干个分片page,每个分片page上存储完整的kv键值对数据;

25、数据库索引层模块,存储数据库数据层中存储的kv键值对数据的索引信息,所述的索引信息以树形结构存储,包括产生各个分片page的分裂key作为索引key,各个分裂key对应的分片page的id信息作为索引value。

26、在第三方面,本发明提供一种电子设备,包括处理器和存储器,所述存储器用于存储计算机可执行程序,当所述计算机可执行程序被所述处理器执行时,所述处理器执行如权利要求1-7任意一项所述的一种数据存储方法。

27、在第四方面,提供一种计算机可读存储介质,该计算机可读存储介质其中存储有多条程序代码,所述程序代码适于由处理器加载并运行以执行上述一种数据存储方法的技术方案中任一项技术方案所述的数据存储方法。

28、本发明上述一个或多个技术方案,至少具有如下一种或多种有益效果:

29、在实施本发明的技术方案中,提出一种数据存储方法,本发明针对经典b+树在flush操作带来的资源消耗代价较高,从而影响系统稳定性,提出了数据库数据层和数据库索引层将数据和索引分开存储,让新数据和旧数据在flush期间独立存储,互不影响,避免了经典b+树实现中新旧数据融合造成大量的资源消耗;同时在非flush阶段,满足条件时可进行数据整理,整体资源消耗更平滑。本发明的数据存储方法对flush更友好,对系统稳定更新好,具有较高的创新性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1