leveldb从入门到精通
文章平均质量分 86
全面介绍leveldb的原理,从代码层面让你快速掌握leveldb存储引擎的实现,以及性能优化。
anda0109
密码学与信息安全,区块链,分布式数据库/存储,现在ALL IN人工智能。公众号:老唐AI进化论
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13-Leveldb快照原理及其实现
LevelDB 的快照(Snapshot)机制在实现一致性读取的同时,对 Compaction 的行为也有一定的影响。为了更好地理解这种影响,我们需要从 LevelDB 的快照机制、Compaction 的原理以及两者之间的交互关系入手。例如,如果某个键在版本 100 被删除,但有一个快照的版本号是 99,那么这个键的旧版本数据必须保留,直到该快照被释放。通过合理的快照管理和参数调优,可以缓解快照对 Compaction 的负面影响,从而在一致性和性能之间取得平衡。:无效数据的存在增加了读取路径上的负担。原创 2025-04-07 17:55:06 · 991 阅读 · 0 评论 -
12-leveldb优化读性能的方法
LevelDB 是一个高性能的键值存储引擎,其设计目标之一就是优化读性能。为了实现这一目标,LevelDB 在多个方面采用了特定的技术和方法来提高读操作的效率。一、内存中的快速读取:MemTable 和 Immutable MemTable。:Table Cache 和 Block Cache 提高热点数据的访问速度。:利用 MemTable 和 Immutable MemTable。:无锁设计和快照机制提升并发读取能力。:利用操作系统缓存和预读取技术。:减少文件数量和读取范围。:快速排除不存在的键。原创 2025-04-02 16:10:27 · 879 阅读 · 0 评论 -
11-leveldb compact原理和性能优化
LevelDB 的 Compaction 和垃圾回收机制在保证数据一致性和读写性能的同时,也面临写放大、空间放大等问题。通过调整策略(如分级 Compaction)、并行化、冷热分离等优化手段,可以显著提升性能。实际应用中,需根据工作负载(读/写密集型)和硬件环境(SSD/HDD)选择合适的配置。原创 2025-04-01 17:38:28 · 1199 阅读 · 0 评论 -
10-leveldb repair流程及优化方法
leveldb做为一个单机存储引擎,难免遇到数据损坏的情况:比如意外断电、磁盘坏块等。轻者文件损坏无法读取,严重者则导致数据库无法启动。这个时候就需要进行数据修复了。leveldb提供的修复流程如下:(1) wal日志文件转化为sstable文件(2) 扫描所有的sstable文件(3) 生成MANIFEST文件:由上述流程可知,leveldb修复后会将所有的文件添加到level 0,根据level 0层的规则,由于文件之间key有重叠,读取时会在每个文件都读取一次,速度是很慢的;同时,我们知道Lev原创 2022-06-13 11:45:00 · 1578 阅读 · 0 评论 -
09-leveldb性能优化(三)
本文主要讲述如何设置WriteOptions参数、ReadOptions参数以及compact参数,来提升读写性能。原创 2022-06-01 22:13:18 · 1070 阅读 · 0 评论 -
08-leveldb性能优化(二)
本文主要介绍leveldb写缓冲区大小、块缓存大小、块大小、文件大小等参数的原理,以及如何合理地设置这些参数以达到性能优化的目的。原创 2022-05-30 12:30:00 · 2379 阅读 · 0 评论 -
07-leveldb性能优化(一)
1-Compaction:清除冗余数据,减少磁盘IOCompaction为什么能提升查询性能,我们从leveldb的原理说起。如图所示,数据写入leveldb的过程如下:数据写入MemtableMemtable达到一定大小后变为Immutable MemtableImmutable Memtable通过Minor Compaction写入0层SSTable数据读取流程如下:从Memtable中查询;从Immutable Memtable中查询;遍历level 0所有文件,若未查找到原创 2022-05-18 22:01:43 · 1701 阅读 · 0 评论 -
06-Leveldb实现-sstable
本文主要介绍leveldb中sstable文件的组成及格式,数据块、元数据块、元数据索引块、索引块、footer的结构,并结合源码进行分析。原创 2022-05-14 20:53:26 · 389 阅读 · 0 评论 -
05-Leveldb实现-Memtable
Memtableleveldb数据写入时并非直接落盘,而是先保存在内存中,在内存中的数据按key进行排序。当内存中的数据达到一定大小时,再将这批数据批量写入磁盘。在内存中的数据结构我们称之为Memtable,本节将介绍Memtable的实现。先看代码:class MemTable { public: // MemTables are reference counted. The initial reference count // is zero and the caller must c原创 2022-05-08 22:13:10 · 865 阅读 · 0 评论 -
04-Leveldb实现-Log
日志文件包含了一系列的32K大小的块。每个块包含了一系列的记录(record):block := record* trailer?record := checksum: uint32 // crc32c of type and data[] ; little-endian length: uint16 // little-endian type: uint8 // One of FULL, FIRST, MIDDLE, LAST data: uint原创 2022-04-24 12:00:00 · 681 阅读 · 0 评论 -
03-Leveldb原理
01-简介谷歌曾经发布过三篇大名鼎鼎的论文,《GFS-Google FileSystem》、《BigTable》、《MapReduce》,其中BigTable中描述了分布式数据库的实现,而leveldb正是该论文中所描述的tablet的具体实现。同时,leveldb的作者就是《BigTable》论文的作者。leveldb是一个非常简洁且具有代表意义的基于LSM TREE的存储引擎,堪称经典。掌握了LEVELDB,也就掌握了LSM TREE思想的精髓。leveldb存储引擎的原理框架如下图所示:上图简原创 2022-04-17 08:38:13 · 855 阅读 · 0 评论 -
02-leveldb入门
01-leveldb编译和使用在github下载开源代码:git clone --recurse-submodules https://github.com/google/leveldb.git进入项目根目录,执行以下命令:mkdir -p build && cd buildcmake -DCMAKE_BUILD_TYPE=Release … && cmake --build .以上命令运行之后会编译全部代码包括测试程序,windows下编译生成文件在leveldb原创 2022-03-20 19:27:48 · 1822 阅读 · 0 评论 -
01-leveldb概述
01-存储背景数据存储是信息时代的一项基础技术,是各种互联网应用背后的重要基石。例如我们每天用到的各种APP,看头条,刷抖音,以及个人的各种电子数据的保存等等,都离不开存储技术。在开发者的角度,数据存储大多是使用数据库,而大家广泛使用的又是比较成熟的关系型数据库,例如mysql、oracle、db2、sqlserver等。一直以来,关系型数据库得到大家的青睐。但随着互联网和信息技术的发展,以及各种新的应用场景的需求,各种数据库不断涌现,也出现了新的数据库类型,比如kv数据库、文档数据库、图数据库、时序数原创 2022-03-13 19:07:24 · 2042 阅读 · 0 评论
分享