CN113590036B - 一种写入batch group串行化逻辑的优化方法 - Google Patents
一种写入batch group串行化逻辑的优化方法 Download PDFInfo
- Publication number
- CN113590036B CN113590036B CN202110841902.8A CN202110841902A CN113590036B CN 113590036 B CN113590036 B CN 113590036B CN 202110841902 A CN202110841902 A CN 202110841902A CN 113590036 B CN113590036 B CN 113590036B
- Authority
- CN
- China
- Prior art keywords
- batch
- sequence number
- writing
- write
- window
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 238000005457 optimization Methods 0.000 title abstract description 8
- 230000007246 mechanism Effects 0.000 claims abstract description 15
- 238000012790 confirmation Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 3
- 230000008901 benefit Effects 0.000 abstract description 2
- 230000001680 brushing effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库领域,具体提供了一种写入batch group串行化逻辑的优化方法,每个batch使用独立的线程,基于滑动窗口机制来实现WAL的并发写入,多次并发访问小IO,维护一个WAL目录,每个batch对应生成一个单独的小log文件。与现有技术相比,本发明优化了RocksDB中WAL写入时batch group串行化逻辑导致的batch写入性能瓶颈问题,不再使用RocksDB内部组提交机制,而是基于滑动窗口机制支持实现batch并发写入WAL,可以通过设置窗口大小来控制并发程度,将一次大IO转换为并发访问小IO。充分利用了SSD的高读写速度和具有并发特性的性能优势,很大程度上提升了存储引擎的写性能。
Description
技术领域
本发明涉及数据库领域,具体提供一种写入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类:
(1)、开始写入事务日志,且已收到确认;
(2)、开始写入事务日志,但未收到确认;
(3)、尚未写入事务日志,但允许写入;
(4)、尚未写入事务日志,且不允许写入;
其中,类型(2)和类型(3)都位于窗口范围内;
窗口大小代表允许并发写入WAL的最大线程数,窗口在接收到确认序号后,才会移动窗口的左边界。
进一步的,在步骤S4中,每个Writer设置一个SequenceNumber,第一个进入队列的Writer的SequenceNumber等于当前VersionSet中的last_allocated_sequence_值,后续Writer的SequenceNumber则等于前一个Writer的SequenceNumber加上前一个Writer的batch中记录的数目;
为链表中的每个Writer设置SequenceNumber的过程是串行的。
进一步的,在步骤S5中,窗口内的写线程开始并发写入WAL时,生成log之后需要判断前面的batch是否已经全部写入完成:
当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认;此时,当前的log文件也不会刷入磁盘,而是进行缓存,只有当前序号的batch全部写入完成后,才会与累积在缓存中的log文件一起进行刷盘操作,更新SequenceNumber,等于原本的SequenceNumber加上该batch的记录数目,然后将新的SequenceNumber返回。
进一步的,如果前面的batch已经全部写入完成,则当前batch生成的log文件直接刷入磁盘并且返回新的SequenceNumber,即原本的SequenceNumber加上该batch的记录数目。
进一步的,在步骤S6中,窗口接收到返回的SequenceNumber确认后,更新当前的last_allocated_sequence_为返回的SequenceNumber,并将窗口滑动至SequenceNumber的位置。得到确认后的Writer对象即为完成了WAL写入,开始写入MemTable。
进一步的,在步骤S7中,完成MemTable写入后,需要更新VersionSet中last_sequence_的值:
同last_allocated_sequence_一样,last_sequence_也需要保证其顺序性,因此在并发写入MemTable时,也需要维护一个滑动窗口,窗口大小代表了允许并发写入MemTable的最大线程数;
同并发写入WAL时维护的滑动窗口机制相同,窗口只有在接收到确认序号后,才会更新last_sequence_的值并移动窗口的左边界,当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认。
本发明的一种写入batch group串行化逻辑的优化方法和现有技术相比,具有以下突出的有益效果:
本发明优化了RocksDB中WAL写入时batch group串行化逻辑导致的batch写入性能瓶颈问题,不再使用RocksDB内部组提交机制,而是基于滑动窗口机制支持实现batch并发写入WAL,可以通过设置窗口大小来控制并发程度,将一次大IO转换为并发访问小IO。充分利用了SSD的高读写速度和具有并发特性的性能优势,很大程度上提升了存储引擎的写性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是本发明中RocksDB内部的batch-commit机制的流程图;
附图2是本发明基于滑动窗口机制实现WAL并发写入的流程图;
附图3是本发明中窗口接收确认序号后向前移动的示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1-3所示,本实施例中的一种写入batch group串行化逻辑的优化方法,该方法放弃使用RocksDB内部的batch-commit机制,不再批量写入事务日志,而是每个batch使用独立的线程,基于滑动窗口机制来实现WAL的并发写入,以多次并发访问小IO取代一次大IO。同时,写事务日志不再使用追加的方式。取而代之的是,维护一个WAL目录,每个batch对应生成一个单独的小log文件。
具体的实现过程如下:
S1、以WriteBatch对象为载体:
在数据库系统中,会涌入接连不断的写请求。每个写请求可以包含一条或者多条的操作,将一条或者多条操作的记录封装到WriteBatch,RocksDB的每次写入都以一个WriteBatch对象为载体。
S2、每个写线程生成一个WriteThread::Write的实例:
每个写线程生成一个WriteThread::Write的实例,关联到对应的一个WriteBatch对象。将多个Writer对象用链表串起来,从而处理并发。
S3、维护一个窗口,链表中的Writer对象可以被分为4类:
维护一个窗口,链表中的Writer对象可以被分为4类:(1)开始写入事务日志,且已收到确认;(2)开始写入事务日志,但未收到确认;(3)尚未写入事务日志,但允许写入;(4)尚未写入事务日志,且不允许写入。其中类型(2)和(3)都位于窗口范围内。窗口大小代表了允许并发写入WAL的最大线程数。窗口在接收到确认序号后,才会移动窗口的左边界。
S4、链表中的每个Writer设置SequenceNumber的过程是串行的:
每个Writer设置一个SequenceNumber,第一个进入队列的Writer的SequenceNumber等于当前VersionSet中的last_allocated_sequence_值,后续Writer的SequenceNumber则等于前一个Writer的SequenceNumber加上前一个Writer的batch中记录的数目。为链表中的每个Writer设置SequenceNumber的过程是串行的。
S5、窗口内的写线程开始并发写入WAL时,生成log之后需要判断前面的batch是否已经全部写入完成:
当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认。此时当前的log文件也不会刷入磁盘,而是进行缓存。
只有当前面序号的batch全部写入完成后,才会与累积在缓存中的log文件一起进行刷盘操作,更新SequenceNumber,等于原本的SequenceNumber加上该batch的记录数目,然后将新的SequenceNumber返回。
如果前面的batch已经全部写入完成,则当前batch生成的log文件直接刷入磁盘并且返回新的SequenceNumber,即原本的SequenceNumber加上该batch的记录数目。
S6、完成WAL写入后开始写入MemTable:
窗口接收到返回的SequenceNumber确认后,更新当前的last_allocated_sequence_为返回的SequenceNumber,并将窗口滑动至SequenceNumber的位置。得到确认后(即滑出窗口外)的Writer对象即为完成了WAL写入,开始写入MemTable。
S7、完成MemTable写入后,需要更新VersionSet中last_sequence_的值:
同last_allocated_sequence_一样,last_sequence_也需要保证其顺序性。因此在并发写入MemTable时,也需要维护一个滑动窗口,窗口大小代表了允许并发写入MemTable的最大线程数。同并发写入WAL时维护的滑动窗口机制相同,窗口只有在接收到确认序号后,才会更新last_sequence_的值并移动窗口的左边界。当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认。
S8、Writer对象在完成MemTable写入之后退出。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种监控告警方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (3)
1.一种写入batch group串行化逻辑的优化方法,其特征在于,每个batch使用独立的线程,基于滑动窗口机制来实现WAL的并发写入,多次并发访问小IO,维护一个WAL目录,每个batch对应生成一个单独的小log文件;
具体步骤如下:
S1、以WriteBatch对象为载体;
S2、每个写线程生成一个WriteThread::Write的实例;
S3、维护一个窗口,链表中的Writer对象可以被分为4类;
(1)、开始写入事务日志,且已收到确认;
(2)、开始写入事务日志,但未收到确认;
(3)、尚未写入事务日志,但允许写入;
(4)、尚未写入事务日志,且不允许写入;
其中,类型(2)和类型(3)都位于窗口范围内;
窗口大小代表允许并发写入WAL的最大线程数,窗口在接收到确认序号后,才会移动窗口的左边界;
S4、链表中的每个Writer设置SequenceNumber的过程是串行的;
每个Writer设置一个SequenceNumber,第一个进入队列的Writer的SequenceNumber等于当前VersionSet中的last_allocated_sequence_值,后续Writer的SequenceNumber则等于前一个Writer的SequenceNumber加上前一个Writer的batch中记录的数目;
为链表中的每个Writer设置SequenceNumber的过程是串行的;
S5、窗口内的写线程开始并发写入WAL时,生成log之后需要判断前面的batch是否已经全部写入完成;
当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认;此时,当前的log文件也不会刷入磁盘,而是进行缓存,只有当前序号的batch全部写入完成后,才会与累积在缓存中的log文件一起进行刷盘操作,更新SequenceNumber,等于原本的SequenceNumber加上该batch的记录数目,然后将新的SequenceNumber返回;
如果前面的batch已经全部写入完成,则当前batch生成的log文件直接刷入磁盘并且返回新的SequenceNumber,即原本的SequenceNumber加上该batch的记录数目;
S6、完成WAL写入后开始写入MemTable;
窗口接收到返回的SequenceNumber确认后,更新当前的last_allocated_sequence_为返回的SequenceNumber,并将窗口滑动至SequenceNumber的位置,得到确认后的Writer对象即为完成了WAL写入,开始写入MemTable;
S7、完成MemTable写入后,需要更新VersionSet中last_ sequence_的值;
同last_allocated_sequence_一样,last_ sequence_也需要保证其顺序性,因此在并发写入MemTable时,也需要维护一个滑动窗口,窗口大小代表了允许并发写入MemTable的最大线程数;
同并发写入WAL时维护的滑动窗口机制相同,窗口只有在接收到确认序号后,才会更新last_ sequence_的值并移动窗口的左边界,当还有前面序号的batch未完成写入但已经有后面序号的batch完成写入的情况下,不会返回确认序号,并且也不会对后续的写入进行确认;
S8、Writer对象在完成MemTable写入之后退出。
2.根据权利要求1所述的一种写入batch group串行化逻辑的优化方法,其特征在于,在步骤S1中,在数据库系统中,会涌入接连不断的写请求,每个写请求包含一条或者多条操作,将一条或者多条操作的记录封装到WriteBatch,RocksDB的每次写入都以一个WriteBatch对象为载体。
3.根据权利要求2所述的一种写入batch group串行化逻辑的优化方法,其特征在于,在步骤S2中,每个写线程生成一个WriteThread::Write的实例,关联到对应的一个WriteBatch对象,将多个Writer对象用链表串起来,从而处理并发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110841902.8A CN113590036B (zh) | 2021-07-26 | 2021-07-26 | 一种写入batch group串行化逻辑的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110841902.8A CN113590036B (zh) | 2021-07-26 | 2021-07-26 | 一种写入batch group串行化逻辑的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113590036A CN113590036A (zh) | 2021-11-02 |
CN113590036B true CN113590036B (zh) | 2024-03-29 |
Family
ID=78249857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110841902.8A Active CN113590036B (zh) | 2021-07-26 | 2021-07-26 | 一种写入batch group串行化逻辑的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113590036B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391696A (zh) * | 2014-11-13 | 2015-03-04 | 中国建设银行股份有限公司 | 一种自动任务处理方法及装置 |
WO2016197858A1 (zh) * | 2015-06-12 | 2016-12-15 | 阿里巴巴集团控股有限公司 | 一种消息通知方法和设备 |
CN109617648A (zh) * | 2018-10-29 | 2019-04-12 | 青岛民航凯亚系统集成有限公司 | 一种可变时间滑动窗口计算方法 |
CN112101955A (zh) * | 2020-11-16 | 2020-12-18 | 北京快成科技股份公司 | 并发支付方法、系统及装置 |
CN112653699A (zh) * | 2020-12-22 | 2021-04-13 | 迈普通信技术股份有限公司 | 一种bfd认证方法、装置及电子设备 |
-
2021
- 2021-07-26 CN CN202110841902.8A patent/CN113590036B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391696A (zh) * | 2014-11-13 | 2015-03-04 | 中国建设银行股份有限公司 | 一种自动任务处理方法及装置 |
WO2016197858A1 (zh) * | 2015-06-12 | 2016-12-15 | 阿里巴巴集团控股有限公司 | 一种消息通知方法和设备 |
CN109617648A (zh) * | 2018-10-29 | 2019-04-12 | 青岛民航凯亚系统集成有限公司 | 一种可变时间滑动窗口计算方法 |
CN112101955A (zh) * | 2020-11-16 | 2020-12-18 | 北京快成科技股份公司 | 并发支付方法、系统及装置 |
CN112653699A (zh) * | 2020-12-22 | 2021-04-13 | 迈普通信技术股份有限公司 | 一种bfd认证方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113590036A (zh) | 2021-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111159252B (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
US5721915A (en) | Interaction between application of a log and maintenance of a table that maps record identifiers during online reorganization of a database | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
US6411964B1 (en) | Methods for in-place online reorganization of a database | |
CN102541757B (zh) | 写缓存方法、缓存同步方法和装置 | |
CN107992269B (zh) | 一种基于去重ssd的事务写入方法 | |
US8560500B2 (en) | Method and system for removing rows from directory tables | |
CN109598156B (zh) | 一种写时重定向引擎快照流方法 | |
US11409616B2 (en) | Recovery of in-memory databases after a system crash | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
JPS63244243A (ja) | フアイルをオープンする方法 | |
US7958149B2 (en) | Computer program and product for append mode insertion of rows into tables in database management systems | |
CN113268457B (zh) | 一种支持高效写的自适应学习索引方法和系统 | |
CN110109927A (zh) | 基于LSM树的Oracle数据库数据处理方法 | |
CN113297136B (zh) | 一种面向lsm树的键值存储方法和存储系统 | |
CN110597663A (zh) | 一种事务处理方法及装置 | |
CN115952195A (zh) | 一种区块链数据溯源查询优化方法 | |
CN113590036B (zh) | 一种写入batch group串行化逻辑的优化方法 | |
CN112100188B (zh) | 基于机器学习的并发控制方法及系统 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
CN110109954B (zh) | 数据处理方法、系统、电子设备及存储介质 | |
US11625386B2 (en) | Fast skip list purge | |
Gruenwald et al. | A performance study of concurrency control in a real-time main memory database system | |
CN114003588A (zh) | 一种钢铁企业管控系统中的物料跟踪数据处理系统及方法 | |
CN111221647B (zh) | 一种分布式存储缓存回收的优化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20221221 Address after: Room 305-22, Building 2, No. 1158 Zhangdong Road and No. 1059 Dangui Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 200120 Applicant after: Shanghai Yunxi Technology Co.,Ltd. Address before: 250100 No. 1036 Tidal Road, Jinan High-tech Zone, Shandong Province, S01 Building, Tidal Science Park Applicant before: Inspur cloud Information Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |