leveldb-原理学习

这几天都在看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 文件. 而层次越深, 合并发生的概率越小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值