MySQL · myrocks · myrocks写入分析

  • 时间:
  • 浏览:0
  • 来源:uu快3诀窍_uu快3app安卓_导航网

注意这里2,3 应该还不能优化改进为

group并发写时writer的清况 变迁图如下:

具体可参考RecalculateWriteStallConditions



rocksdb写入流程还有优化空间,Facebook全是相关的优化。

这里只分析rocksdb引擎的提交流程,实际MyRocks提交时还需先写binlog(binlog开启的清况 ).

写入控制

源码形态图如下(图片来自林青)

WriteBatch与Myrocks事务处置密切相关,事务中的记录提交前都以字符串的形式存储在WriteBatch->rep_中,要么都提交,要么都回滚。 回滚的逻辑比较简单,只还不能清理WriteBatch->rep_即可。详见TransactionImpl::Rollback

group非并发写时writer的清况 变迁图如下:

提交流程及优化

中间的图是在group内writer并发写memtable的清况 。 非并发写memtable时,没人LaunchParallelFollowers/CompleteParallelWorker, Insertmemtable是由leader串行写入的。 这里group commit有以下要点

每个writer可能性的清况 如下

待提交的事务都依次加入到提交的writer队列中,这一writer队列被划分为有一一有两个有一一有两个group. 每个group有有一一有两个leader, 一点为follower,leader负责批量写WAL。每个group由双向链表link_older, link_newer链接。如下图所示





然而,写WAL是有一一有两个串行操作。为了提高提交的传输速率, rocksdb引入了group commit机制。

总结

rocksdb在提交写入时,需考虑以下几种清况 ,详见PreprocessWrite

写入流程

writer的清况 变迁跟group否有有并发写memtable有关 当开启并发写memtable(rocksdb_allow_concurrent_memtable_write=on)且group中的writer要花费有有一一有两个时,group才会并发写。

其中第2,3步在提交时完成

rocksdb引擎提交时就完成有一一有两个事情

有一一有两个简单的insert commit堆栈如下

myrocks的写入流程还不能简单的分为以下几步来完成

有一一有两个简单的insert 写入WriteBatch堆栈如下