最近在看区块链代码的时候对LevelDB有点兴趣,所以了解了一下,这篇文章写的挺好的,可以看看
https://blog.csdn.net/linuxheik/article/details/52768223
刚刚看到这篇文章,介绍的比上一篇详细:
https://blog.csdn.net/charles1e/article/details/52966776
LevelDB是google开源的KV(key-value,存储的数据都是kv的形式)单机数据库,官方版本是C++,比特币使用的是c++版本:
https://github.com/google/leveldb
以太坊使用的是go语言版本:
https://github.com/syndtr/goleveldb
性能方面:号称顺序写、随机写速度快,顺序读快,随机读性能一般,
所以想了解下为什么性能是这样的。读了上面的博客和其他一些文章,大致有了答案。
LevelDB写数据的流程,写数据的时候依次写入
1 Log文件(用来系统崩溃后恢复数据,防止丢失数据),存储的数据是Key无序的,写入的时候顺序写入
2 memtable文件(内存,使用Skiplist实现),Key有序
当memtable满足一定条件(写满了之后,默认是4M大小,以太坊设置的是192M)改变为immutable memtable同时触发执行minor compaction(