[发明专利]一种写入batch group串行化逻辑的优化方法在审
申请号: | 202110841902.8 | 申请日: | 2021-07-26 |
公开(公告)号: | CN113590036A | 公开(公告)日: | 2021-11-02 |
发明(设计)人: | 刘梦真 | 申请(专利权)人: | 浪潮云信息技术股份公司 |
主分类号: | G06F3/06 | 分类号: | G06F3/06 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜鹏 |
地址: | 250100 山东省济南市高*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 写入 batch group 串行 逻辑 优化 方法 | ||
本发明涉及数据库领域,具体提供了一种写入batch group串行化逻辑的优化方法,每个batch使用独立的线程,基于滑动窗口机制来实现WAL的并发写入,多次并发访问小IO,维护一个WAL目录,每个batch对应生成一个单独的小log文件。与现有技术相比,本发明优化了RocksDB中WAL写入时batch group串行化逻辑导致的batch写入性能瓶颈问题,不再使用RocksDB内部组提交机制,而是基于滑动窗口机制支持实现batch并发写入WAL,可以通过设置窗口大小来控制并发程度,将一次大IO转换为并发访问小IO。充分利用了SSD的高读写速度和具有并发特性的性能优势,很大程度上提升了存储引擎的写性能。
技术领域
本发明涉及数据库领域,具体提供一种写入batch group串行化逻辑的优化方法。
背景技术
RocksDB是使用C++编写的持久化的、嵌入式的KV存储引擎,主要由MemTable、Immutable MemTable、SSTable和WAL组成。插入KV数据时,首先需要将数据写到WAL文件中,然后将其刷新到磁盘以保证数据的持久性和安全性。
如果每次提交事务都需要调用一次sync将日志刷入磁盘,那么事务提交将会很大程度上限制数据库的写入性能。可以考虑将好几个事务的提交合并成一次sync来做,从而提高数据库系统的TPS。所以在RocksDB内部,使用batch-commit机制来批量写入事务日志,这样就可以使用一个sync调用来同时提交多个事务。但由于WAL的写入需要保证不同batchgroup之间的顺序性,因此只能通过单线程进行写入。这种batch group串行化逻辑导致WAL写入成为RocksDB的batch写入性能的瓶颈点。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的写入batch group串行化逻辑的优化方法。
本发明解决其技术问题所采用的技术方案是:
一种写入batch group串行化逻辑的优化方法,每个batch使用独立的线程,基于滑动窗口机制来实现WAL的并发写入,多次并发访问小IO,维护一个WAL目录,每个batch对应生成一个单独的小log文件。
进一步的,具体步骤如下:
S1、以WriteBatch对象为载体;
S2、每个写线程生成一个WriteThread::Write的实例;
S3、维护一个窗口,链表中的Writer对象可以被分为4类;
S4、链表中的每个Writer设置SequenceNumber的过程是串行的;
S5、窗口内的写线程开始并发写入WAL时,生成log之后需要判断前面的batch是否已经全部写入完成;
S6、完成WAL写入后开始写入MemTable;
S7、完成MemTable写入后,需要更新VersionSet中last_sequence_的值;
S8、Writer对象在完成MemTable写入之后退出。
进一步的,在步骤S1中,在数据库系统中,会涌入接连不断的写请求,每个写请求包含一条或者多条操作,将一条或者多条操作的记录封装到WriteBatch,RocksDB的每次写入都以一个WriteBatch对象为载体。
进一步的,在步骤S2中,每个写线程生成一个WriteThread::Write的实例,关联到对应的一个WriteBatch对象,将多个Writer对象用链表串起来,从而处理并发。
进一步的,在步骤S3中,维护一个窗口,链表中的Writer对象可以被分为4类:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮云信息技术股份公司,未经浪潮云信息技术股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110841902.8/2.html,转载请声明来源钻瓜专利网。