过去很久了。现在可以说“本文的理论分析基本符合日常实践”。另外,写放大真的很当疼…
LSM-Tree 的写放大本文缺少实际的实践经验。全部来自在网上的“道听途说”和自己的“胡思乱想”。 写放大、读放大、空间放大 基于 LSM-Tree 的存储系统越来越常见了,如 RocksDB、Le...
过去很久了。现在可以说“本文的理论分析基本符合日常实践”。另外,写放大真的很当疼…
LSM-Tree 的写放大本文缺少实际的实践经验。全部来自在网上的“道听途说”和自己的“胡思乱想”。 写放大、读放大、空间放大 基于 LSM-Tree 的存储系统越来越常见了,如 RocksDB、Le...
@Tom青年 主要写给自己看。内容的受众并不是那么广,看的人自然不多。
LevelDB 完全解析(0):基本原理和整体架构之前零零散散写过几篇和 LSM-Tree、LevelDB 有关的文章。之后也看了一些代码和论文,笔记也做了一些,但大都比较零乱、随意,没花功夫整理。 这次打算将之前的文章和之...
智能指针 C++11 引入了 3 个智能指针类型: std::unique_ptr<T> :独占资源所有权的指针。 std::shared_ptr<T> :共享资源所有权的指...
Compaction 的作用 因为 LevelDB 的增删改都是通过追加写来实现的,所以需要通过后台线程的 compaction 来: 清理过期(旧版本或者已删除)的数据。 ...
Lambda 表达式(Lambda Expression)是 C++11 引入的一个“语法糖”,可以方便快捷地创建一个“函数对象”。 从 C++11 开始,C++ 有三种方式...
自动类型推导 现代的编程语言,不管是动态语言(JavaScript、Python 等),还是静态语言(Go、Rust 等),大都支持自动类型推导(type deduction...
右值引用(rvalue reference)是 C++11 为了实现移动语意(move semantic)和完美转发(perfect forwarding)而提出来的。 右值...
LevelDB 有两个地方需要用到有序遍历: 对外提供范围查询的接口(NewIterator)。 内部的 Compaction。 通过前面的文章,我们了解到 LevelDB ...
LevelDB 提供三个和写操作相关的接口: Put :插入/修改一条记录。 Delete :删除一条记录。 Write :原子地插入/修改/删除多条记录。 Put 和 De...
LevelDB 支持的读操作分为两种: 点查询(Point Query):读一个 key 的数据。 范围查询(Range Query):有序读一段 key 范围的数据。 本文...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable LevelDB 完全解析(2):Log LevelDB 完全解...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable LevelDB 完全解析(2):Log LevelDB 完全解...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable LevelDB 完全解析(2):Log LevelDB 完全解...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable LevelDB 完全解析(2):Log LevelDB 完全解...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable LevelDB 完全解析(2):Log SSTable 全称 ...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 LevelDB 完全解析(1):MemTable 这里的 log 是指 Write Ahead Log。前面说了...
前文回顾 LevelDB 完全解析(0):基本原理和整体架构 MemTable 介绍 MemTable,顾名思议,就是内存表。每个 LevelDB 实例最多会维护两个 Mem...
之前零零散散写过几篇和 LSM-Tree、LevelDB 有关的文章。之后也看了一些代码和论文,笔记也做了一些,但大都比较零乱、随意,没花功夫整理。 这次打算将之前的文章和之...