理解rocksdb

2022-08-09  本文已影响0人  谭英智

rocksdb是一个持久化kv的数据库。它充分发挥flash和ram作为存储的性能。

它还支持硬盘和HDFS来作为存储介质。

rocksdb是在leveldb的基础上发展起来的。

rocksdb vs leveldb

介绍

rocksdb-overview

常用API

memtable

排序

memtable之间无序

sst相同层之间有序

WAL

每个写入会让一个主线程写入WAL

然后各子线程并发写入memtable

当memtable持久化后,相应的WAL会被清理掉

并生成一个新的WAL给后面的写入使用

checksum

每一块SST都有一个checksum,全局也有一个checksum

用于检查程序异常时数据的一致性

合并策略

事务

read

在事务内,未被提交的数据,其他事务不可见,自己事务内可见

事务类型

读已提交

快照

解决不可重复读和幻读

避免停顿

持久化memtable和合并操作是共用线程的。

当所有后台线程都忙与合并,导致没有线程可以用来持久化,而此时memtable都满了。

这会导致新写入会卡顿。

为了避免这种情况,可以通过配置一组独立的线程,专门服务于持久化。

只读模式

只读模式下,可以避开锁的开销,得到更高的读性能

数据压缩

在浅层使用低压缩而快的算法

在深层使用高压缩算法

块缓存

使用LRU缓存来加快读

表缓存

用于缓存sst文件的文件描述符

IO

前缀迭代器

通过加入前缀bloom过滤器,来实现

WriteBatch

原子批量写入

上一篇 下一篇

猜你喜欢

热点阅读