ITPub博客

首页 > 数据库 > > RocksDB从0到1

RocksDB从0到1

作者:u_9ff4c058a0e0 时间:2022-04-15 15:48:51 0 删除 编辑

前言

相比于PostgreSQL,后来了解MySQL(InnoDB),在个人直观感觉上,除了细节上的不同,整体理解起来坡度不大。

而了解RocksDB,由于LSM-tree与b-tree 的不同,很多理念都可以说是换了一种认知方式。就比如说 b-tree 里的常说的BufferPool,一开始直观上理解,RocksDB觉得对应的是Block Cache;但是Block Cache只是针对读的优化,而硬要说RocksDB的BufferPool是什么,觉得应该是WriteBufferManager。

不过纠结这些概念上的对应关系也没什么意义,从使用者的角度,RocksDB也是Transactional Storage Manager;因此,也可以划分为四类子模块,但是具体实现就不像同为Btree的PgSQL和MySQL那样的了。

Architecture of a Database System

几个切入点

在读代码的时候,习惯随手画点概念图,也不是专业的UML,毕竟图片的记忆效率最高

这里有几个笔者觉得适合作为一开始了解RocksDB的切入点:

1. RocksDB不是page-oriented,没有表空间的概念。其数据组织在很多Sorted String Table中,由Version来管理。

versions

2. 同样是有WAL,page-oriented类的InnoDB存储的是physiological 的 page 变更,而RocksDB中直接到的是WriteBatch。

RocksDB WAL Internal

3. 上面提到写入RocksDB WAL的Write Batch,在写入MenTable时会按Column Family 分别写入。

RocksDB write-batch & memtable

4. RocksDB的sequence number就是其中KV的版本号,按上图所示,如果MemTable中只放已提交的数据,那么可见性判断就很好做,这也是默认的做法。但是为了提高性能,希望在2PC的prepare阶段就可以些MemTable,这就是Write Prepared的策略;但是需要解决可见性的问题,就通过如下图的这些结构维护。

PessimisticTransactionDB Write Prepared

---

总之,看RocksDB代码给我的感觉就是焕然一新,除了LSM-tree之外,还有modern C++,之前看的PgSQL是C写的,MySQL(InnoDB)是C++98,这又来了11 甚至 14,后面还有20,妈的,学不动了,C++真是让人头秃啊🤮……

来源 https://www.modb.pro/db/58325

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69999831/viewspace-3130155/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-02-11

  • 博文量
    1828
  • 访问量
    20495