golevelDB源码走读
项目地址
- https://github.com/syndtr/goleveldb (lsm)
- https://github.com/flower-corp/lotusdb (lsm & b+, using bbolt)
- https://github.com/timtadh/fs2 (b+ & list)
- https://github.com/philippgille/gokv (kv abstract)
- https://github.com/flower-corp/rosedb (bitcask)
- https://github.com/etcd-io/bbolt (b+, 很牛)
- https://github.com/etcd-io/etcd (etcd, 基于 bbolt)
基本认识
- levelDB 采用 LSM tree,具体的存储文件采用 sstable 格式
- levelDB 是一个单机应用,且没有配备 server 和 client,相当于 sqlite 的模式
- rocksDB 是以 levelDB 为基础的分布式 kv server
- Google BigTable,HBase,RocksDB,Apache Cassandra 都是基于 LSM tree 的数据库
- chrome 的 indexDB 也是基于 levelDB 的 (或者参考?)
- 其实 prometheus 也是同样的模型 prometheus代码走读
- 对于一些嵌入式场景,或者一些 有状态 server,都可以用 levelDB 做 kv 存储
- SSDB 是基于 levelDB 的 kv 存储,提供了 client-server ,并实现了 redis 的接口,可以用 redis client 实现很多功能,还是很有前途的。
- bitcask 是类 LSM tree 的方案,具体的存储上,采用了 hashmap 的方式,rosedb 就是采用这种方案,并且也实现了 redis 的接口。
源码走读
不得不说,用两个字形容 goleveldb 的代码: 非常简洁!
- 需要再细看一下 memdb 的具体实现
- 需要再细看一下 compact 的具体实现
看看别人的笔记,写得多好啊:
- https://www.jianshu.com/p/750c7ea9b88c (levelDB)
- https://www.jianshu.com/p/a4ce176f11ce (levelDB)
- https://www.jianshu.com/p/798c457412d7 (levelDB)
- https://www.jianshu.com/p/82c0a55f8b92 (levelDB)
- https://mp.weixin.qq.com/s/s8s6VtqwdyjthR6EtuhnUA (rosedb 作者)
- https://blog.csdn.net/ws1296931325/article/details/86635751/ (sstable)
- https://zhuanlan.zhihu.com/p/415799237 (lsm tree)
- https://zhuanlan.zhihu.com/p/490963897 (lsm tree)
- https://developer.hashicorp.com/vault/tutorials/monitoring/inspect-data-boltdb ( hashicorp 的 vault 项目实例 )
- https://zhuanlan.zhihu.com/p/332439403 ( bboltdb,看看别人是怎么写源码导读的 ) 如何把读源码价值最大化
其他思考
- 嵌入式场景下的数据库选型
Happiness mainly comes from our own attitude, rather than from external factors.
— Dalai Lama
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!