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

技术编号:34767633 阅读:16 留言:0更新日期:2022-08-31 19:22
本发明专利技术公开了内存数据库存储引擎数据优化方法、电子设备及存储介质,属于数据库管理技术领域,本发明专利技术要解决的技术问题为如何有效减少内存中存储的数据量,提升数据库的性能,采用的技术方案为:该方法具体如下:插入增量:基于ART树的内存存储引擎,将SQL原Update改为直接插入增量操作;KV数据插入:存储引擎查询要修改的行数据,并按照增量操作修改对应列,合并后重新插入;若没有快照,则将旧的KV数据删除;对于Update Returning语法,存储引擎返回全量Value;判断Put语法插入的是否为写意图的删除:若是,则直接把链表头节点对应Key的写意图删掉;若否,则查找存储该Key的双向链表,将链表内的其他版本删除,完成插入。完成插入。完成插入。

【技术实现步骤摘要】
内存数据库存储引擎数据优化方法、电子设备及存储介质


[0001]本专利技术涉及数据库管理
,具体地说是一种内存数据库存储引擎数据优化方法、电子设备及存储介质。

技术介绍

[0002]近年来,随着动态随机存储器(DRAM)容量的上升和单位价格的下降,使大量数据在内存中的存储和处理成为可能。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。
[0003]内存中数据的数据量是影响存储引擎性能的重要因素。ART树在所有的索引结构中,查询性能最优。但是,索引结构普遍存在一个问题,随着索引的数据量增大,查询性能会降低。当数据量从64K提升到16M时,ART树的查询性能降低了至少4倍,这种现象严重影响到了存储引擎的性能。同时,由于内存存储的数据量有限,有效的数据优化方法能够在相同大小的内存中存储更多的数据。
[0004]Update语句在执行过程中,需要将存储引擎中的全量数据读到SQL层进行处理,再Put到存储引擎中,该过程不仅导致链路过长,而且全量数据的查找和插入占用了过多的资源,导致性能降低。

技术实现思路

[0005]本专利技术的技术任务是提供一种内存数据库存储引擎数据优化方法、电子设备及存储介质,来解决如何有效减少内存中存储的数据量,提升数据库的性能的问题。
[0006]本专利技术的技术任务是按以下方式实现的,一种内存数据库存储引擎数据优化方法,该方法具体如下:
[0007]插入增量:基于ART树的内存存储引擎,将SQL原Update改为直接插入增量操作;
[0008]KV数据插入:存储引擎查询要修改的行数据,并按照增量操作修改对应列,合并后重新插入;若没有快照,则将旧的KV数据删除;对于Update Returning语法,存储引擎返回全量Value,无需由上层合并;
[0009]判断Put语法插入的是否为写意图的删除:
[0010]若是,则不需要插入到ART树的节点,直接把链表头节点对应Key的写意图删掉,减少存储的数据量;
[0011]若否,则查找存储该Key的双向链表,将链表内的其他版本删除,完成插入。
[0012]其中,ART(Adaptive Radix Tree,自适应基数/前缀树)是以二进制位串为关键字的trie树,是一种多叉树形结构,同时又类似多层索引表,每个中间节点包含指向多个子节点的指针数组,叶子节点包含指向实际的对象的指针。中间节点根据长度的不同分成若干种不同类型,随着数据的变化而自行调整。虽然使用基于ART树构建的KV内存存储引擎会具备很好的性能优势,但由于树的高度取决于Key的长度,时间复杂度取决于key的长度,所以当Key的长度增加时,性能会下降,存在性能瓶颈。索引结构普遍存在一个问题,随着索引的
数据量增大,查询性能会降低。
[0013]作为优选,当Put语法插入的Key有多个版本时(SequenceNumber不同),遍历存储该Key多版本的双向链表,将该Key相同HLC,不同SequenceNumber的其他版本删除,只保留最新版本和快照之前的版本,其余版本存到一个删除链表中等待后台线程删除。
[0014]更优地,Update增量编码方式具体如下:
[0015]当Value的头部增加一列值标签(ValueTag),存放Update类型,用于区分是否为Update操作;
[0016]将后续的列类型(ColumnType)改为增量操作类型(OperationType,如Replace,Sum,Sub等),最后的列值为增量值(UpdateValue);
[0017]同时,Update增量语法不处理系统表数据,增加判断,跳过表ID小于52的表;编码时将对应列的增量操作类型编码。
[0018]更优地,存储引擎在数据插入前对增量Value进行编码,判断Value第一列的类型是否为Update:
[0019]若是,则对Value进行增量更新,最后插入的Value是更新后的值。
[0020]更优地,对增量Value进行编码具体如下:
[0021]对增量Value进行解码,得到需要增量更新的列ID(ColumnID)、增量操作类型(OperationType)和增量值(UpdateValue);
[0022]通过Key查询出存储引擎中最新的Value;
[0023]对该最新的Value进行解码,得到对应的列ID(ColumnID)、列类型(ColumnType)和列值(ColumnValue);
[0024]根据增量更新的ID与列ID的一一对应关系,得到要更新后的列,按照增量操作类型(OperationType)和增量值(UpdateValue)对列值(ColumnValue)进行更新;
[0025]将更新后的Value按Value的编码方式重新编码为一整条Value,插入存储引擎中;旧的KV数据存到删除链表中,等待后台线程删除;
[0026]更优地,Value的编码方式具体如下:
[0027]一行Value由多个列(Column)组成,每个列由值标签(ValueTag)和列值(ColumnValue)组成,值标签包括列ID(ColumnID)和列类型(ColumnType);
[0028]将原Update语句为读取数据
‑‑
解码
‑‑
编码
‑‑
插入的执行流程推到存储层实现,修改上层Value的编码方式。
[0029]作为优选,KV数据插入时,解码UserKey,得到表ID(TableID);当表ID大于0、Key的时间戳为空以及值类型为删除(kTypeDeletion)时,则认定此次插入是写意图删除,直接将链表头部的写意图KV数据删除;
[0030]基于ART的存储引擎中,使用一个双向链表存储Key的不同版本,由于写意图的Key没有时间戳,所以该Key肯定存储在链表的头部节点,遇到写意图删除的KV数据插入时,不需要将该条写意图KV数据插入,只需将链表头部节点的写意图KV数据删除即可。
[0031]更优地,写意图删除时,先找到存储该UserKey的双向链表,通过迭代器得到链表头部的Key和下一个NextKey,将此链表的头部指向NextKey,此操作使用原子操作;再将之前的头部节点删除。
[0032]一种电子设备,包括:存储器和至少一个处理器;
[0033]其中,所述存储器上存储有计算机程序;
[0034]所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的内存数据库存储引擎数据优化方法。
[0035]一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的内存数据库存储引擎数据优化方法。
[0036]本专利技术的内存数据库存储引擎数据优化方法、电子设备及存储介质具有以下本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存数据库存储引擎数据优化方法,其特征在于,该方法具体如下:插入增量:基于ART树的内存存储引擎,将SQL原Update改为直接插入增量操作;KV数据插入:存储引擎查询要修改的行数据,并按照增量操作修改对应列,合并后重新插入;若没有快照,则将旧的KV数据删除;对于Update Returning语法,存储引擎返回全量Value;判断Put语法插入的是否为写意图的删除:若是,则直接把链表头节点对应Key的写意图删掉;若否,则查找存储该Key的双向链表,将链表内的其他版本删除,完成插入。2.根据权利要求1所述的内存数据库存储引擎数据优化方法,其特征在于,当Put语法插入的Key有多个版本时,遍历存储该Key多版本的双向链表,将该Key相同HLC,不同SequenceNumber的其他版本删除,只保留最新版本和快照之前的版本,其余版本存到一个删除链表中等待后台线程删除。3.根据权利要求1或2所述的内存数据库存储引擎数据优化方法,其特征在于,Update增量编码方式具体如下:当Value的头部增加一列值标签,存放Update类型,用于区分是否为Update操作;将后续的列类型改为增量操作类型,最后的列值为增量值;同时,Update增量语法增加判断,跳过表ID小于52的表;编码时将对应列的增量操作类型编码。4.根据权利要求3所述的内存数据库存储引擎数据优化方法,其特征在于,存储引擎在数据插入前对增量Value进行编码,判断Value第一列的类型是否为Update:若是,则对Value进行增量更新,最后插入的Value是更新后的值。5.根据权利要求4所述的内存数据库存储引擎数据优化方法,其特征在于,对增量Value进行编码具体如下:对增量Value进行解码,得到需要增量更新的列ID、增量操作类型和增量值;通过Key查询出存储引擎中最新的Value;对该最新的...

【专利技术属性】
技术研发人员:张华海梁波张炜刚
申请(专利权)人:山东浪潮科学研究院有限公司
类型:发明
国别省市:

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

1