当前位置: 首页 > 工具软件 > LevelDB > 使用案例 >

leveldb-原理学习

籍永安
2023-12-01

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

动机

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

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

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

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

  4. 为什么要多个sst文件,而不是一个就搞定?
  5. 使用多个sst,每个sst文件内部都是按key排序的,不同的sst没有交叉(level0)除外,这样可以先快速定位在哪个sst文件,再进行查找。
  6. 为什么要level?
  7. 这个应该是leveldb的精华,并且我了解还利用了lsm这种数据结构?我自己的感觉是,采用分层的结构,可以简化数据的查找。为了减少 log 文件合并所影响的 sst 文件个数, 将 sst 按层次组织, 层次越深, 文件数量越多. 最坏的情况, 每一次合并都会修改该层次所有的 sst 文件. 而层次越深, 合并发生的概率越小。
 类似资料: