IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

LevelDB 的原理和动机

idea's blog 2013-01-16 14:09:55 累计浏览 3,326 次
本机暂存

写硬盘

   为了持久化, 必须写硬盘.

Log 文件

   为了快速写入硬盘, 必须采用追加方式顺序写到 log 文件. 这导致 log 文件中的数据是无序的.

sst 文件

   为了快速从硬盘中读取数据, 基于查找算法和局部性原理考虑, 必须将数据排序组织到 sst 文件中.

多个 sst 文件而不是单个

   为了快速的插入数据到 sst 文件中, 必须使用多个 sst 文件, 每个 sst 文件只保存一定范围的数据. 堆.

Levels

   为了减少 log 文件合并所影响的 sst 文件个数, 将 sst 按层次组织, 层次越深, 文件数量越多. 最坏的情况, 每一次合并都会修改该层次所有的 sst 文件. 而层次越深, 合并发生的概率越小. 树.

Bloom Filter

   由于 LevelDB 在某一层查找不存在的数据时, 会继续在下一层进行查找, 所以对于不存在的数据的查找会速度非常慢. 所以, 需要结合 Bloom Filter, 利用 Bloom Filter 能快速地判定”不存在”的特点.

    同分类推荐文章

    1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
    2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
    3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

    查看更多 数据库 文章 →

    建议继续学习

    1. redis源代码分析 - persistence (累计阅读 32,229)
    2. 跳表(skiplist)学习笔记 (累计阅读 5,745)
    3. Amazon分布式系统Dynamo (累计阅读 5,694)
    4. leveldb 的实现 (累计阅读 4,545)
    5. 深入剖析 redis RDB 持久化策略 (累计阅读 3,886)
    6. Leveldb 编译错误背后的C++标准变化 (累计阅读 3,550)
    7. Tokyo Tyrant 与 Redis 的一些简单比较 (累计阅读 3,378)
    8. Redis几个认识误区 (累计阅读 3,041)
    9. Membase基础教程 (累计阅读 2,966)
    10. 线性同余发生器的参数如何选取?(以JDK和leveldb的代码为例) (累计阅读 2,879)