RocksDB是FaceBook起初作为实验性质开发的一个高效数据库软件,旨在充分实现快存上存储数据的服务能力。RocksDB的主要设计点是在快存和高服务压力下性能表现优越,支持point lookup 和 range scan。RockesDB 是一个嵌入式的K-V(任意字节流)存储, 支持Get(key)、Put(Key)、Delete(Key)和NewIterator()。RocksDB的基本组成是memtable、sstfile和logfile。RocksDB架构图如下:

Iterator和Snapshot提供了DB在某个时间点的一个一致性视图,快速短期/前台的scan操作比较适合用Iterator,长期/后台操作适合用Snapshot。Iterator过程中会增加引用计数,当实例重启时,Snapshot会丢失。

RocksDB提供了多个操作的事务性,支持悲观和乐观模式。

prefix_extractor来声明一个key_prefix,然后RocksDB为每一个key_prefix存储相应的blooms,提升RangeScan操作。

RocksDB通过checksum来检测磁盘数据损坏。

当用户重复写入一个key时,在DB中会存在这个key的多个value,compaction操作就是来删除这个key的冗余数据。RocksDB也支持多线程并行compaction。多线程并行flush操作可能会引起写停顿。

RocksDB支持全量备份、增量备份和复制。

RocksDb 支持 LRU 和 CLock两种模式。cache的每个分片都有自己的LRU list和hash表来查找使用。每个shard都有个mutex来控制数据并发访问。不管是数据查找还是数据写入,线程都要获取cache分片的锁。CLOCK CACHE的每个shard都有一个cache entry的圆环list。算法会遍历圆环的所有entry寻找unspined entry来回收。

RocksDB原生地就支持三种记录类型,分别为Put、Delete和Merge。Merge可以合并多个Put和Merge记录为一个单独的记录。

MemTable是一种在内存中保存数据的数据结构,一旦MemTable满了,就会转换为只读的不可改变的,然后会创建一个新的MemTable来提供新的写操作。后台线程负责将MemTable中的数据flush到SST file,然后这个MemTable就会被销毁。memtable的默认实现是skiplist,用户也可以使用 HashLinkList、HashSkipList or Vector 来提高查询性能。

每个SST file都有相应的一个Bloom filter。

backup engine一直保持打开状态,不需要在每一次backup或者restore时都重新创建; 另一种加速backup engine 初始化的方法就是删除非必须的backup。

Checkpoints是一个时间点上的snapshot。当使用Read-only模式打开的话,可以支持查询这个时间点上的数据,当使用Read-Write模式打开的话,可以作为一个可写的snapshot。Checkpoints可以作为全量或者新增备份的backup使用。

SST file的index/filter会被分片为多个小 block,并会配备一个索引。当需要读取index/filter时,只有top-level index会load到内存。分片的好处:更高的cache 命中率,节省IO不用在index/filters中间折衷。SSL文件索引查询性能优化,LSM tree build成功后,每一个层次的SST file的位置是对齐的,甚至,相对于下一层次的文件的位置也是对齐的。基于次,我们可以缩小二分搜索的范围。

Simulation Cache(SimCache)可以帮助用户在模拟的内存容量而不是物理上实际占用内存下预测block cache的性能数据,比如:hit、miss。

 RocksDB可以通过两种方式利用分层存储架构:分层存储部署和分层缓存部署。当使用前者时,可以将LSM的数据分布在多层持久化存储中。使用后者时,用户可以使用快速的持久化媒介来提供高性能的读cache服务,避免频繁读取LSM的part数据,提高RocksDB的整体性能。

RocksDB中二阶段提交的实现。本文总结一下共有如下几个要点:

  • Modification of the WAL format
  • Extension of the existing transaction API
  • Modification of the write path
  • Modification of the recovery path
  • Integration with MyRocks

RocksDB Iterator提供用户以有序的方式前向或者后向遍历DB,也可以seek 到DB的特定key上。

参考:

Rocksdb的优劣及应用场景分析

RocksDB使用场景和特性

RocksDB 学习笔记相关推荐

  1. rocksdb学习笔记

    rocksdb是在leveldb的基础上优化而得,解决了leveldb的一些问题. 主要的优化点 1.增加了column family,这样有利于多个不相关的数据集存储在同一个db中,因为不同colu ...

  2. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  3. JavaEE 企业级分布式高级架构师(二十)RocketMQ学习笔记(2)

    RocketMQ学习笔记 进阶篇 消息样例 普通消息 消息发送 发送同步消息 发送异步消息 单向发送消息 三种发送方式的对比 消费消息 顺序消息 如何保证顺序 顺序的实现 MessageListene ...

  4. StreamX学习笔记之StreamAPI开发应用

    文章目录 项目配置 项目结构 assembly\bin目录 setclasspath.sh shutdown.sh startup.sh streamx.sh logback.xml applicat ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  9. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

最新文章

  1. saltstack使用指南----常用执行模块
  2. 财务用计算机可以一次摊销,购入的电脑可以一次性计提折旧吗
  3. MapInfo开发心得——控件篇【转】
  4. Java中equals、==和hashcode()
  5. android xml 未能解析文件,Android Studio提示“无法解析符号”,但项目已编译
  6. java 连接kafka超时_java – Kafka KStreams – 处理超时
  7. 分区表理论解析(上):SQL Server 2k52k8系列(一)
  8. java 2_Java(二)
  9. Oracle约数,Oracle约束简介
  10. c html转换成word,C#实现HTML转WORD及WORD转PDF的方法
  11. 生活大爆炸版石头剪刀布(洛谷-P1328)
  12. 18、监听器/国际化
  13. Eclipse代码自动补全设置
  14. 【渝粤教育】国家开放大学2018年春季 0266-21T设计构成 参考试题
  15. Android开源项目推荐之「网络请求哪家强」
  16. 冒泡排序面向对象java_冒泡排序
  17. waves效果器_学会EQ效果器,浑厚亮嗓又大气
  18. 贴片钽电容的正负极性识别和贴片玻璃二极管的正负极性识别
  19. 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性
  20. oracle10g搭建,Oracle 10g环境的搭建手册

热门文章

  1. 学人工智能,这10本书,精读一本就够!
  2. 32wei客户端 oracle10g_【oracle 10g客户端下载】oracle 10g数据库客户端32位/64位下载 官方版-七喜软件园...
  3. 【Android性能】【流畅度】概念初识
  4. 修复Cydia没网 和 Host Unreachable错误
  5. 程序人生的四个象限和两条主线(转)
  6. python怎么用switch,Python 能开发任天堂Switch应用??奉上教程!
  7. 如何采集淘宝最新价格
  8. keyshot手机渲染教程_Keyshot 渲染视频教程 入门到精通实用实例教材全套
  9. 硕盟 type c六合一 扩展坞苹果电脑转换器
  10. mongodb 导出txt_MongoDB导出工具(MongoToFile)