首页
学习
活动
专区
工具
TVP
发布

linjinhe的专栏

专栏作者
68
文章
115677
阅读量
28
订阅数
LevelDB 完全解析(11):Compaction
因为 LevelDB 的增删改都是通过追加写来实现的,所以需要通过后台线程的 compaction 来:
linjinhe
2020-06-22
1.6K0
现代 C++:一文读懂智能指针
简单说,当我们独占资源的所有权的时候,可以使用 std::unique_ptr 对资源进行管理——离开 unique_ptr 对象的作用域时,会自动释放资源。这是很基本的 RAII 思想。
linjinhe
2020-06-22
1.1K0
现代 C++:右值引用、移动语意、完美转发
右值引用(rvalue reference)是 C++11 为了实现移动语意(move semantic)和完美转发(perfect forwarding)而提出来的。
linjinhe
2020-06-02
2.2K0
现代 C++:自动类型推导
现代的编程语言,不管是动态语言(JavaScript、Python 等),还是静态语言(Go、Rust 等),大都支持自动类型推导(type deduction)。
linjinhe
2020-06-02
1.6K0
现代 C++:Lambda 表达式
Lambda 表达式(Lambda Expression)是 C++11 引入的一个“语法糖”,可以方便快捷地创建一个“函数对象”。
linjinhe
2020-06-02
9680
LevelDB 完全解析(10):读操作之 Iterator
通过前面的文章,我们了解到 LevelDB 的数据是保存在内部多个不同组件的,并且每个组件的数据格式都不一样。
linjinhe
2020-06-02
1.8K0
LevelDB 完全解析(7):初始化
options - 打开/创建 LevelDB 实例的配置参数。 dbname - 保存数据的目录名。 dbptr - 初始化成功的 LevelDB 实例保存在 *dbptr。
linjinhe
2020-05-26
4150
LevelDB 完全解析(8):读操作之 Get
LevelDB 通过 leveldb::DB::Get 接口对外提供点查询的能力,具体的实现是 leveldb::DBImpl::Get。接口声明如下:
linjinhe
2020-05-26
1.5K0
LevelDB 完全解析(9):写操作
以上,便是 LevelDB 的写入流程。写入队列 + 合并写操作,逻辑和代码都十分简洁。比较不足的是,整个写入过程都是单线程的。
linjinhe
2020-05-26
8650
LevelDB 完全解析(6):Filter
LevelDB 可以设置通过 bloom filter 来减少不必要的读 I/O 次数。
linjinhe
2020-05-08
6830
LevelDB 完全解析(5):Cache
在 LevelDB 中,block cache 和 table cache 都是基于 ShardedLRUCache 实现的。
linjinhe
2020-05-08
8720
LevelDB 完全解析(4):Manifest
内容上,Manifest 文件保存了整个 LevelDB 实例的元数据,比如:每一层有哪些 SSTable。 格式上,Manifest 文件其实就是一个 log 文件,一个 log record 就是一个 VersionEdit。
linjinhe
2020-05-08
1.4K0
LevelDB 完全解析(3):SSTable
SSTable 全称 Sorted String Table,顾名思义,里面的 key-value 都是有序保存的。除了两个 MemTable,LevelDB 中的大部分数据是以 SSTable 的形式保存在外存上。
linjinhe
2020-05-08
1.2K0
LevelDB 完全解析(2):Log
这里的 log 是指 Write Ahead Log。前面说了,LevelDB 写入的数据会先保存到 MemTable。为了防止宕机导致数据丢失,在将数据写入 MemTable 之前,会先将数据持久化到 log 文件中。
linjinhe
2020-05-08
8550
LevelDB 完全解析(1):MemTable
MemTable,顾名思议,就是内存表。每个 LevelDB 实例最多会维护两个 MemTable: mem_ 和 imm_。mem_ 可以读写,imm_ 只读。
linjinhe
2020-05-08
1.2K0
LevelDB 完全解析(0):基本原理和整体架构
之前零零散散写过几篇和 LSM-Tree、LevelDB 有关的文章。之后也看了一些代码和论文,笔记也做了一些,但大都比较零乱、随意,没花功夫整理。
linjinhe
2020-05-08
1.5K1
设计数据密集型应用(6-7):分片、事务
随着业务发展,用户数量、商品数量、订单数量都在持续增长,数据库的负载越来越高。我们开始对数据库进行垂直拆分(垂直分片),把这三张表拆到三个数据库,而业务代码改改数据库的配置就好。
linjinhe
2020-04-02
5710
设计数据密集型应用(10-11):大数据的批处理和流处理
谈大数据批处理,绕不过的就是 MapReduce。MapReduce 是大数据处理的老祖宗了。
linjinhe
2020-04-01
5330
设计数据密集型应用(8-9):从单机到分布式
所以,当你通过网络发送一个数据包的时候,程序必须考虑到这个数据包可能丢失、也可能延迟。
linjinhe
2020-04-01
4950
设计数据密集型应用(5):复制
这里主要参考 MySQL 的 Primary-Secondary Replication。
linjinhe
2020-04-01
5810
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档