RocksDB 介绍
来源:互联网 发布:云计算是什么意思啊 编辑:程序博客网 时间:2024/06/08 03:47
RocksDB相对传统的关系数据库的一大改进是采用LSM树存储引擎。LSM树是非常有创意的一种数据结构,它和传统的B+树不太一样,下面先说说B+树。
RocksDB相对传统的关系数据库的一大改进是采用LSM树存储引擎。LSM树是非常有创意的一种数据结构,它和传统的B+树不太一样,下面先说说B+树。
- B+ 树
上图是B+树的一个例子。 B+树根节点和枝节点分别记录每个叶子节点的最小值,并用一个指针指向叶子节点。叶子节点里每个键值都指向真正的数据块,每个叶子节点都有前指针和后指针,这是为了做范围查询时,叶子节点间可以直接跳转,从而避免再去回溯至枝和跟节点。
B+树最大的性能问题是会产生大量的随机IO,随着新数据的插入,叶子节点会慢慢分裂,逻辑上连续的叶子节点在物理上往往不连续,甚至分离的很远,但做范围查询时,会产生大量读随机IO。
对于大量的随机写也一样,举一个插入key跨度很大的例子,如7->1000->3->2000 … 新插入的数据存储在磁盘上相隔很远,会产生大量的随机写IO,低下的磁盘寻道速度严重影响性能。
- LSM 树(Log-Structured Merge Tree)
LSM树而且通过批量存储技术规避磁盘随机写入问题。 LSM树的设计思想非常朴素, 它的原理是把一颗大树拆分成N棵小树, 它首先写入到内存中(内存没有寻道速度的问题,随机写的性能得到大幅提升),在内存中构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上。磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。
- LevelDB 特点
1) LevelDB是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDB不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。
2) LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数。
3) LevelDB支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。
4) LevelDB还支持数据压缩等操作,这对于减小存储空间以及增快IO效率都有直接的帮助。
- RocksDB 对LevelDB的优化
1) 增加了column family,这样有利于多个不相关的数据集存储在同一个db中,因为不同column family的数据是存储在不同的sst和memtable中,所以一定程度上起到了隔离的作用。
2) 采用了多线程同时进行compaction的方法,优化了compact的速度。
3) 增加了merge operator,优化了modify的效率。
4) 将flush和compaction分开不同的线程池,能有效的加快flush,防止stall。
5) 增加了对write ahead log(WAL)的特殊管理机制,这样就能方便管理WAL文件,因为WAL是binlog文件。
RocksDB的整体结构:
rocksdb从3.0开始支持ColumnFamily的概念。每个columnfamilyl的meltable与sstable都是分开的,所以每一个column family都可以单独配置,所有column family共用同一个WA文件,可以保证跨column family写入时的原子性。
- RocksDB 介绍
- rocksdb
- RocksDB
- RocksDB介绍:一个比LevelDB更彪悍的引擎
- [转]RocksDB介绍:一个比LevelDB更彪悍的引擎
- RocksDB介绍:一个比LevelDB更彪悍的引擎
- rocksdb使用
- RocksDB整理
- RocksDB译文之一 -- RocksDB简介
- rocksdb:DestroyDB函数
- rocksdb 编译安装 日志
- 编译level db rocksdb
- RocksDB上锁机制
- Rocksdb 数据库--MANIFEST文件
- Rocksdb数据库---levle compaction
- Rocksdb Merge Operator
- rocksdb table formats
- Editing Rocksdb BlockBasedTable Format
- Python----__len__可以用len()函数返回对象实例的“长度”
- RMAN-06025
- 如何打造千万级Feed流系统
- JS中AOP的实现和运用
- PREV-5 错误票据
- RocksDB 介绍
- Mac电脑修改用户名丢失管理员权限问题修复
- 文章标题
- 页面布局(圣杯,双飞翼)
- Retrofit 2.0 使用教程
- SSM整合shiro实现多用户表多Realm统一登录认证(大章附代码)
- 苹果审核4.3拒绝,这些细节你一定要注意!
- Tensorflow下对RNN中Batch-size的测试和理解
- Android Studio中NDK环境配置