一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于RocksDB实现行列混合存储的方法与流程

2021-10-24 10:14:00 来源:中国专利 TAG:
一种基于rocksdb实现行列混合存储的方法
技术领域
:1.本发明涉及数据库存储
技术领域
:,具体的说是一种基于rocksdb实现行列混合存储的方法。
背景技术
::2.rocksdb是一个可嵌入、持久型的key‑value(键值)存储,采用lsm树存储引擎,写入的数据会先存储到一个内存表中,当内存表中的数据大小超过设定的阈值后会启动一个后台线程,将内存表数据写到sst文件中,进行持久化存储。3.在oltp应用场景中,数据库引擎会把数据库表的一行数据编码为key‑value数据存储到rocksdb,其中key是表主键列的值,其他列的值则编码为value。而在olap应用场景下,往往只需要对数据表的某几列数据进行聚合计算处理,这种key‑value编码的行存储方式就比较低效,它需要从磁盘读取整行数据并将全部列值解码后才能得到需要的列数据,这就增加了磁盘io使用量,加重了cpu计算负担。技术实现要素:4.本发明针对目前技术发展的需求和不足之处,提供一种基于rocksdb实现行列混合存储的方法。5.本发明的一种基于rocksdb实现行列混合存储的方法,解决上述技术问题采用的技术方案如下:6.一种基于rocksdb实现行列混合存储的方法,其实现内容包括:7.将数据表模型存储到rocksdb的默认列族,将每个数据库表的行数据编码为key‑value数据后写入独立的数据表列族内存表;8.在列族内存表的数据需要持久化到磁盘时,根据数据表模型解码key‑value数据,得到列值数据,得到的列值数据写入列式存储引擎文件,同时,为rocksdbapi扩展新的向量查询接口,提供快速的列式数据查询能力。9.具体的,rocksdb存储引擎扩展新的api‑createtable,用于创建支持列族内存表的列族,以表名作为列族名,数据表模型的元数据编码为key‑value数据写入到rocksdb的默认列族,其中:key表示数据表名;value表示数据表模型的元数据,包括列名、列的类型、主键索引。10.更具体的,将每个数据库表的行数据编码为key‑value数据时:11.首先,将key‑value数据写入数据表列族的活动内存表,当活动内存表使用量达到阈值后,自动切换为只读内存表,12.随后,即可启动后台线程,将只读内存表的key‑value数据持久化到磁盘。13.更具体的,rocksdb是通过列存表构建器将内存表的key‑value数据持久化的,默认使用sst表构建器类将key‑value数据写入sst文件。14.更具体的,列存表构建器将查询默认列族,得到当前列族表的数据表模型,然后根据数据表模型将key‑value数据解码得到一组列值,最后以列为单位将列值数据写入列式存储引擎文件中。15.更具体的,通过数据先写入内存再批量写入列存引擎的方式,一可以保证高速写入,二是批量写入列存引擎也避免了底层列存数据文件的碎片化。16.更具体的,为rocksdbapi扩展新的向量查询接口时,输入参数有:主键范围、本次查询需要的列名、过滤条件、最大返回行数,输出参数有:以列为基础组织的向量数据结果。17.更具体的,为rocksdbapi扩展新的向量查询接口时,扩展了新的列存表读取器,用于读取列存引擎的数据,同时,基于列族内存表的key‑value数据,列存表读取器从默认列族读取数据表模型,根据数据表模型解析列族内存表的key‑value数据,并转换为向量模型数据,随后与列存引擎读取的数据合并后返回给上层olap应用。18.更具体的,被删除的数据以标记删除的key‑value写入数据表列族内存表,在持久化时,列存表构建器解析到key‑value删除标记时,也以标记删除的方式写入列存引擎,然后在后台线程对列存引擎的底层列式文件合并,并将这些标记删除的数据进行物理删除。19.本发明的一种基于rocksdb实现行列混合存储的方法,与现有技术相比具有的有益效果是:20.(1)本发明可以在列族内存表的数据需要持久化到磁盘时,根据数据表模型解码key‑value数据,得到列值数据,并写入列式存储引擎文件,同时,为rocksdbapi扩展新的向量查询接口,提供快速的列式数据查询能力,实现行列混合存储;21.(2)本发明可以实现rocksdb对在线事务处理oltp和在线数据分析olap应用混合场景的数据高效处理,而且客户端仍然使用rocksdbapi兼容接口,保证rocksdb应用的平滑升级。附图说明22.附图1是本发明中将key‑value数据写入数据表列族的流程示意图;23.附图2是本发明中通过向量查询接口查询数据的流程示意图。具体实施方式24.为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。25.实施例一:26.本实施例提出一种基于rocksdb实现行列混合存储的方法,其实现内容包括:27.(一)将数据表模型存储到rocksdb的默认列族,将每个数据库表的行数据编码为key‑value数据后写入独立的数据表列族内存表。key‑value数据简称kv数据。28.本实施例中,rocksdb存储引擎扩展新的api‑createtable,用于创建支持列族内存表的列族,以表名作为列族名,数据表模型的元数据编码为key‑value数据写入到rocksdb的默认列族,其中:key表示数据表名;value表示数据表模型的元数据,包括列名、列的类型、主键索引。29.本实施例中,参考附图1,将每个数据库表的行数据编码为key‑value数据时:30.首先,将key‑value数据写入数据表列族的活动内存表,当活动内存表使用量达到阈值后,自动切换为只读内存表,31.随后,即可启动后台线程,将只读内存表的key‑value数据持久化到磁盘。32.(二)在列族内存表的数据需要持久化到磁盘时,根据数据表模型解码key‑value数据,得到列值数据,得到的列值数据写入列式存储引擎文件,同时,为rocksdbapi扩展新的向量查询接口,提供快速的列式数据查询能力。33.本实施例中,参考附图1,rocksdb是通过列存表构建器将内存表的key‑value数据持久化的,默认使用sst表构建器类将key‑value数据写入sst文件。34.列存表构建器将查询默认列族,得到当前列族表的数据表模型,然后根据数据表模型将key‑value数据解码得到一组列值,最后以列为单位将列值数据写入列式存储引擎文件中。通过数据先写入内存再批量写入列存引擎的方式,一可以保证高速写入,二是批量写入列存引擎也避免了底层列存数据文件的碎片化。35.需要知道的是,多个列族表共用一个预写日志,可以保证batch数据内多个表数据行更新的原子一致性,以及memtable数据的异常恢复。同时,该写入流程对rocksdb侵入性小,兼容已有api,可保证上层应用的平滑升级。36.本实施例中,为rocksdbapi扩展新的向量查询接口时,输入参数有:主键范围、本次查询需要的列名、过滤条件、最大返回行数,输出参数有:以列为基础组织的向量数据结果。37.参考附图2,为rocksdbapi扩展新的向量查询接口时,扩展了新的列存表读取器,用于读取列存引擎的数据,同时,基于列族内存表的key‑value数据,列存表读取器从默认列族读取数据表模型,根据数据表模型解析列族内存表的key‑value数据,并转换为向量模型数据,随后与列存引擎读取的数据合并后返回给上层olap应用。38.本实施例中,被删除的数据以标记删除的key‑value写入数据表列族内存表,在持久化时,列存表构建器解析到key‑value删除标记时,也以标记删除的方式写入列存引擎,然后在后台线程对列存引擎的底层列式文件合并,并将这些标记删除的数据进行物理删除。39.综上可知,采用本发明的一种基于rocksdb实现行列混合存储的方法,可以实现rocksdb对在线事务处理oltp和在线数据分析olap应用混合场景的数据高效处理。40.以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本
技术领域
:的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜