MVCC
我们在内存中,经常会使用互斥锁的方式,来处理共享资源
并原则上,会最小粒度的只锁共享资源的算术运算。因此非常快
对于数据库则不太一样,数据库操作可能伴随磁盘 IO
要保持一定的读写效率,又能兼顾事务的 ACID 四要素中的 I (隔离性),常见的解决方案就是 MVCC 机制
MVCC 的核心想法就是:并发读写时,都基于当前数据的快照,写时不修改当前快照;又通过技巧,新写数据与旧快照数据重新构建出一个新版本。这样就可以互不干扰
关于 MVCC 的经典案例,笔者认为 Linux 的写时拷贝(Copy-on-write ,简称 COW)就是一个非常好的参考
BoltDB 与 MVCC
BoltDB 的 MVCC 实现是并发多读单写,即:
- 写事务,同时可以并发多读
- 多个写事务,串行
BoltDB 的 MVCC 实现细节
BoltDB 的数据组织方式是按 page 页为单位(结点)组成的 B+ 树(后面会介绍)
- Bolt