linjinhe

LV0
发表了文章

LevelDB 完全解析(11):Compaction

因为 LevelDB 的增删改都是通过追加写来实现的,所以需要通过后台线程的 compaction 来:

linjinhe
发表了文章

现代 C++:一文读懂智能指针

简单说,当我们独占资源的所有权的时候,可以使用 std::unique_ptr 对资源进行管理——离开 unique_ptr 对象的作用域时,会自动释放资源。这...

linjinhe
发表了文章

现代 C++:右值引用、移动语意、完美转发

右值引用(rvalue reference)是 C++11 为了实现移动语意(move semantic)和完美转发(perfect forwarding)而提...

linjinhe
发表了文章

现代 C++:自动类型推导

现代的编程语言,不管是动态语言(JavaScript、Python 等),还是静态语言(Go、Rust 等),大都支持自动类型推导(type deduction...

linjinhe
发表了文章

现代 C++:Lambda 表达式

Lambda 表达式(Lambda Expression)是 C++11 引入的一个“语法糖”,可以方便快捷地创建一个“函数对象”。

linjinhe
发表了文章

LevelDB 完全解析(10):读操作之 Iterator

通过前面的文章,我们了解到 LevelDB 的数据是保存在内部多个不同组件的,并且每个组件的数据格式都不一样。

linjinhe
发表了文章

LevelDB 完全解析(8):读操作之 Get

LevelDB 通过 leveldb::DB::Get 接口对外提供点查询的能力,具体的实现是 leveldb::DBImpl::Get。接口声明如下:

linjinhe
发表了文章

LevelDB 完全解析(7):初始化

options - 打开/创建 LevelDB 实例的配置参数。 dbname - 保存数据的目录名。 dbptr - 初始化成功的 LevelDB 实例保...

linjinhe
发表了文章

LevelDB 完全解析(9):写操作

以上,便是 LevelDB 的写入流程。写入队列 + 合并写操作,逻辑和代码都十分简洁。比较不足的是,整个写入过程都是单线程的。

linjinhe
发表了文章

LevelDB 完全解析(6):Filter

LevelDB 可以设置通过 bloom filter 来减少不必要的读 I/O 次数。

linjinhe
发表了文章

LevelDB 完全解析(5):Cache

在 LevelDB 中,block cache 和 table cache 都是基于 ShardedLRUCache 实现的。

linjinhe
发表了文章

LevelDB 完全解析(4):Manifest

内容上,Manifest 文件保存了整个 LevelDB 实例的元数据,比如:每一层有哪些 SSTable。 格式上,Manifest 文件其实就是一个 lo...

linjinhe
发表了文章

LevelDB 完全解析(3):SSTable

SSTable 全称 Sorted String Table,顾名思义,里面的 key-value 都是有序保存的。除了两个 MemTable,LevelDB ...

linjinhe
发表了文章

LevelDB 完全解析(2):Log

这里的 log 是指 Write Ahead Log。前面说了,LevelDB 写入的数据会先保存到 MemTable。为了防止宕机导致数据丢失,在将数据写入 ...

linjinhe
发表了文章

LevelDB 完全解析(1):MemTable

MemTable,顾名思议,就是内存表。每个 LevelDB 实例最多会维护两个 MemTable: mem_ 和 imm_。mem_ 可以读写,imm_ 只读...

linjinhe
发表了文章

LevelDB 完全解析(0):基本原理和整体架构

之前零零散散写过几篇和 LSM-Tree、LevelDB 有关的文章。之后也看了一些代码和论文,笔记也做了一些,但大都比较零乱、随意,没花功夫整理。

linjinhe
发表了文章

设计数据密集型应用(6-7):分片、事务

随着业务发展,用户数量、商品数量、订单数量都在持续增长,数据库的负载越来越高。我们开始对数据库进行垂直拆分(垂直分片),把这三张表拆到三个数据库,而业务代码改改...

linjinhe
发表了文章

设计数据密集型应用(10-11):大数据的批处理和流处理

谈大数据批处理,绕不过的就是 MapReduce。MapReduce 是大数据处理的老祖宗了。

linjinhe
发表了文章

设计数据密集型应用(8-9):从单机到分布式

所以,当你通过网络发送一个数据包的时候,程序必须考虑到这个数据包可能丢失、也可能延迟。

linjinhe
发表了文章

设计数据密集型应用(5):复制

这里主要参考 MySQL 的 Primary-Secondary Replication。

linjinhe

个人简介

个人成就

扫码关注云+社区

领取腾讯云代金券