您的位置:首页 > 其它

leveldb-原理学习

2017-07-11 15:28 134 查看
这几天都在看leveldb的原理,但是并没有仔细考虑过这种设计的好处以及为什么要这么设计?所以,自己想简单总结一下。

动机

这一部分主要参照了这个链接[LevelDB 的原理和动机]

为什么写硬盘?

持久化,这也是有别于redis的区别,因为后者狂吃内存,我们现在用leveldb的原因也就是在于,内存村不下这么多的用户搜索历史。

log文件的作用是什么?为什么要设计这个文件?

为了快速写入硬盘, 必须采用追加方式顺序写到 log 文件. 这导致 log 文件中的数据是无序的,但这也是为什么leveldb具有很好的写性能。

为什么要设计sst文件?

为了快速从硬盘中读取数据, 基于查找算法和局部性原理考虑, 必须将数据排序重新组织到 sst 文件中.如果说log文件是为了快速写,那么设计sst文件的目的就是为了读操作而生。

为什么要多个sst文件,而不是一个就搞定?

使用多个sst,每个sst文件内部都是按key排序的,不同的sst没有交叉(level0)除外,这样可以先快速定位在哪个sst文件,再进行查找。

为什么要level?

这个应该是leveldb的精华,并且我了解还利用了lsm这种数据结构?我自己的感觉是,采用分层的结构,可以简化数据的查找。为了减少 log 文件合并所影响的 sst 文件个数, 将 sst 按层次组织, 层次越深, 文件数量越多. 最坏的情况, 每一次合并都会修改该层次所有的 sst 文件. 而层次越深, 合并发生的概率越小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: