内存数据库存储引擎数据优化方法、电子设备及存储介质与流程

文档序号:31336584发布日期:2022-08-31 08:57阅读:35来源:国知局
1.本发明涉及数据库管理
技术领域
:,具体地说是一种内存数据库存储引擎数据优化方法、电子设备及存储介质。
背景技术
::2.近年来,随着动态随机存储器(dram)容量的上升和单位价格的下降,使大量数据在内存中的存储和处理成为可能。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。3.内存中数据的数据量是影响存储引擎性能的重要因素。art树在所有的索引结构中,查询性能最优。但是,索引结构普遍存在一个问题,随着索引的数据量增大,查询性能会降低。当数据量从64k提升到16m时,art树的查询性能降低了至少4倍,这种现象严重影响到了存储引擎的性能。同时,由于内存存储的数据量有限,有效的数据优化方法能够在相同大小的内存中存储更多的数据。4.update语句在执行过程中,需要将存储引擎中的全量数据读到sql层进行处理,再put到存储引擎中,该过程不仅导致链路过长,而且全量数据的查找和插入占用了过多的资源,导致性能降低。技术实现要素:5.本发明的技术任务是提供一种内存数据库存储引擎数据优化方法、电子设备及存储介质,来解决如何有效减少内存中存储的数据量,提升数据库的性能的问题。6.本发明的技术任务是按以下方式实现的,一种内存数据库存储引擎数据优化方法,该方法具体如下:7.插入增量:基于art树的内存存储引擎,将sql原update改为直接插入增量操作;8.kv数据插入:存储引擎查询要修改的行数据,并按照增量操作修改对应列,合并后重新插入;若没有快照,则将旧的kv数据删除;对于updatereturning语法,存储引擎返回全量value,无需由上层合并;9.判断put语法插入的是否为写意图的删除:10.若是,则不需要插入到art树的节点,直接把链表头节点对应key的写意图删掉,减少存储的数据量;11.若否,则查找存储该key的双向链表,将链表内的其他版本删除,完成插入。12.其中,art(adaptiveradixtree,自适应基数/前缀树)是以二进制位串为关键字的trie树,是一种多叉树形结构,同时又类似多层索引表,每个中间节点包含指向多个子节点的指针数组,叶子节点包含指向实际的对象的指针。中间节点根据长度的不同分成若干种不同类型,随着数据的变化而自行调整。虽然使用基于art树构建的kv内存存储引擎会具备很好的性能优势,但由于树的高度取决于key的长度,时间复杂度取决于key的长度,所以当key的长度增加时,性能会下降,存在性能瓶颈。索引结构普遍存在一个问题,随着索引的数据量增大,查询性能会降低。13.作为优选,当put语法插入的key有多个版本时(sequencenumber不同),遍历存储该key多版本的双向链表,将该key相同hlc,不同sequencenumber的其他版本删除,只保留最新版本和快照之前的版本,其余版本存到一个删除链表中等待后台线程删除。14.更优地,update增量编码方式具体如下:15.当value的头部增加一列值标签(valuetag),存放update类型,用于区分是否为update操作;16.将后续的列类型(columntype)改为增量操作类型(operationtype,如replace,sum,sub等),最后的列值为增量值(updatevalue);17.同时,update增量语法不处理系统表数据,增加判断,跳过表id小于52的表;编码时将对应列的增量操作类型编码。18.更优地,存储引擎在数据插入前对增量value进行编码,判断value第一列的类型是否为update:19.若是,则对value进行增量更新,最后插入的value是更新后的值。20.更优地,对增量value进行编码具体如下:21.对增量value进行解码,得到需要增量更新的列id(columnid)、增量操作类型(operationtype)和增量值(updatevalue);22.通过key查询出存储引擎中最新的value;23.对该最新的value进行解码,得到对应的列id(columnid)、列类型(columntype)和列值(columnvalue);24.根据增量更新的id与列id的一一对应关系,得到要更新后的列,按照增量操作类型(operationtype)和增量值(updatevalue)对列值(columnvalue)进行更新;25.将更新后的value按value的编码方式重新编码为一整条value,插入存储引擎中;旧的kv数据存到删除链表中,等待后台线程删除;26.更优地,value的编码方式具体如下:27.一行value由多个列(column)组成,每个列由值标签(valuetag)和列值(columnvalue)组成,值标签包括列id(columnid)和列类型(columntype);28.将原update语句为读取数据‑‑解码‑‑编码‑‑插入的执行流程推到存储层实现,修改上层value的编码方式。29.作为优选,kv数据插入时,解码userkey,得到表id(tableid);当表id大于0、key的时间戳为空以及值类型为删除(ktypedeletion)时,则认定此次插入是写意图删除,直接将链表头部的写意图kv数据删除;30.基于art的存储引擎中,使用一个双向链表存储key的不同版本,由于写意图的key没有时间戳,所以该key肯定存储在链表的头部节点,遇到写意图删除的kv数据插入时,不需要将该条写意图kv数据插入,只需将链表头部节点的写意图kv数据删除即可。31.更优地,写意图删除时,先找到存储该userkey的双向链表,通过迭代器得到链表头部的key和下一个nextkey,将此链表的头部指向nextkey,此操作使用原子操作;再将之前的头部节点删除。32.一种电子设备,包括:存储器和至少一个处理器;33.其中,所述存储器上存储有计算机程序;34.所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的内存数据库存储引擎数据优化方法。35.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的内存数据库存储引擎数据优化方法。36.本发明的内存数据库存储引擎数据优化方法、电子设备及存储介质具有以下优点:37.(一)本发明优化了update逻辑,将update转为insert;优化了数据的插入逻辑,将多余的数据及时删除,有效的减少了内存中存储的数据量,提升了数据库存储引擎的性能;38.(二)本发明通过优化插入逻辑,同时将update改为insert逻辑,减少了art索引的数据量,提升了内存存储引擎存储数据的效率和性能;39.(三)本发明将sql原update需要先查询再插入的操作,改为直接插入增量操作,存储层只返回全量value,无需由上层合并,而是在插入时进行合并,并将原kv数据删除,提升了update的执行速度,减少了数据量;40.(四)当put语法插入的是写意图删除数据时,不需要插入节点,直接把链表对应节点的写意图数据删掉;插入新的kv数据时,将链表中不同sequencenumber的其他版本删除,只保留最新版本及快照之前的版本(如果设置了快照),减少存储的数据量。附图说明41.下面结合附图对本发明进一步说明。42.附图1为内存数据库存储引擎数据优化方法的流程框图;43.附图2为原value编码示意图;44.附图3为update优化后的value编码示意图。具体实施方式45.参照说明书附图和具体实施例对本发明的内存数据库存储引擎数据优化方法、电子设备及存储介质作以下详细地说明。46.实施例1:47.如附图1所示,本实施例的内存数据库存储引擎数据优化方法,该方法具体如下:48.s1、插入增量:基于art树的内存存储引擎,将sql原update改为直接插入增量操作;49.s2、kv数据插入:存储引擎查询要修改的行数据,并按照增量操作修改对应列,合并后重新插入;若没有快照,则将旧的kv数据删除;对于updatereturning语法,存储引擎返回全量value,无需由上层合并;50.s3、判断put语法插入的是否为写意图的删除:51.①、若是,则不需要插入到art树的节点,直接把链表头节点对应key的写意图删掉,减少存储的数据量;52.②若否,则查找存储该key的双向链表,将链表内的其他版本删除,完成插入。53.当put语法插入的key有多个版本时(sequencenumber不同),遍历存储该key多版本的双向链表,将该key相同hlc,不同sequencenumber的其他版本删除,只保留最新版本和快照之前的版本,其余版本存到一个删除链表中等待后台线程删除。54.如附图3所示,本实施例中的update增量编码方式具体如下:55.(1)、当value的头部增加一列值标签(valuetag),存放update类型,用于区分是否为update操作;56.(2)、将后续的列类型(columntype)改为增量操作类型(operationtype,如replace,sum,sub等),最后的列值为增量值(updatevalue);57.同时,update增量语法不处理系统表数据,增加判断,跳过表id小于52的表;编码时将对应列的增量操作类型编码。58.本实施例中的存储引擎在数据插入前对增量value进行编码,判断value第一列的类型是否为update:59.若是,则对value进行增量更新,最后插入的value是更新后的值。60.更优地,对增量value进行编码具体如下:61.(1)、对增量value进行解码,得到需要增量更新的列id(columnid)、增量操作类型(operationtype)和增量值(updatevalue);62.(2)、通过key查询出存储引擎中最新的value;63.(3)、对该最新的value进行解码,得到对应的列id(columnid)、列类型(columntype)和列值(columnvalue);64.(4)、根据增量更新的id与列id的一一对应关系,得到要更新后的列,按照增量操作类型(operationtype)和增量值(updatevalue)对列值(columnvalue)进行更新;65.(5)、将更新后的value按value的编码方式重新编码为一整条value,插入存储引擎中;旧的kv数据存到删除链表中,等待后台线程删除;66.如附图2所示,本实施例中的value的编码方式具体如下:67.(1)、一行value由多个列(column)组成,每个列由值标签(valuetag)和列值(columnvalue)组成,值标签包括列id(columnid)和列类型(columntype);68.(2)、将原update语句为读取数据‑‑解码‑‑编码‑‑插入的执行流程推到存储层实现,修改上层value的编码方式。69.本实施例中的kv数据插入时,解码userkey,得到表id(tableid);当表id大于0、key的时间戳为空以及值类型为删除(ktypedeletion)时,则认定此次插入是写意图删除,直接将链表头部的写意图kv数据删除。70.基于art的存储引擎中,使用一个双向链表存储key的不同版本,由于写意图的key没有时间戳,所以该key肯定存储在链表的头部节点,遇到写意图删除的kv数据插入时,不需要将该条写意图kv数据插入,只需将链表头部节点的写意图kv数据删除即可。71.本实施例中的写意图删除时,先找到存储该userkey的双向链表,通过迭代器得到链表头部的key和下一个nextkey,将此链表的头部指向nextkey,此操作使用原子操作;再将之前的头部节点删除。72.实施例2:73.本实施例还提供了一种电子设备,包括:存储器和处理器;74.其中,存储器存储计算机执行指令;75.处理器执行所述存储器存储的计算机执行指令,使得处理器执行本发明任一实施例中的内存数据库存储引擎数据优化方法。76.实施例3:77.本实施例还提供了一种计算机可读存储介质,其中存储有多条指令,指令由处理器加载,使处理器执行本发明任一实施例中的内存数据库存储引擎数据优化方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。78.在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。79.用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-rym、dvd-rw、dvd+rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。80.此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。81.此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。82.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1