RocksDB是facebook基于LevelDB实现的,目前为facebook内部大量业务提供服务。经过facebook大量工作,将RocksDB为MySQL的一个存储引擎移植到MySQL,称之为MyRocks。
经过两年的发展,MyRocks已经比较成熟(RC阶段),现已进入了facebook MySQL的主分支了。MyRocks是开源的,参见git 。
下面对MyRocks做一个简单介绍,不涉及源码。

RocksDB与innodb的比较

  • innodb空间浪费, B tree分裂导致page内有较多空闲,page利用率不高。innodb现有的压缩效率也不高,压缩以block为单位,也会造成浪费。

  • 写入放大:innodb 更新以页为单位,最坏的情况更新N行会更新N个页。RocksDB append only方式
    另外,innodb开启double write也会增加写入。

  • RocksDB对齐开销小:SST file (默认2MB)需要对齐,但远大于4k, RocksDB_block_size(默认4k) 不需要对齐,因此对齐浪费空间较少

  • RocksDB索引前缀相同值压缩存储

  • RocksDB占总数据量90%的最底层数据,行内不需要存储系统列seqid
    (innodb聚簇索引列包含trxid,roll_ptr等信息)

来看看facebook的测试数据

  • 数据空间对比

  • QPS

  • 写入放大对比

数据字典

数据字段信息保存在System Column Family (System CF) "__system__"中
数据字段信息包括:

  • 表信息,表名和index id的映射
  • 索引信息,索引元数据信息和column family id。column family和index的对应关系 1:N
  • column family,一些标记,比如reverse属性等
  • binlog信息
  • 统计信息,每个SST file都自带统计信息(行数、实际大小等),在flush或compaction时更新统计信息,同时统计信息会汇总到数据字典统计信息表中。

以上信息可以通过information_schema查看,如RocksDB_ddl,RocksDB_index_file_map等

记录格式

RocksDB的行以key value的形式存储,和innodb类似,记录格式主键和二级索引也有区别

事务与锁

MyRocks也是基于行锁,锁信息都保存在内存中。

MyRocks也支持MVCC,MVCC通过快照的方式实现,类似于PostgreSQL。

MyRocks目前只支持两种隔离级别,RC和RR。

RR表现和innodb并不一样,RocksDB 的快照不是在事务开始的时候建立,而是延迟到第一次读的时候建立.

以下client1 MyRocks返回的是2,innodb返回1

<client 1>                                               <client 2>
CREATE TABLE t1(pk INT PRIMARY KEY);
INSERT INTO t1 VALUES(1);
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN
INSERT INTO t1 VALUES(2);
SELECT COUNT(*) FROM t1; // MyRocks返回的是2,innodb返回1

  

RC表现也不一样,事务1大更新多行过程中,其他事务也可以更新事务还未更新到的行,事务1再更新时会失败。

复制

MyRocks也是通过binlog方式复制,由于binlog与RocksDB之间没有xa,异常crash可能丢数据,所以,MyRocks主备环境建议开启semi-sync.
由于gap lock支持不健全(仅primary key上支持), 使用statement方式复制会导致不一致,所有MyRocks建议使用行级复制。

备份恢复

支持MySQLdumup逻辑备份

 #内部会执行以下语句
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION WITH CONSISTENT RocksDB SNAPSHOT;

  

同时有自动的物理备份工具MyRocks_hotbackup,但还不支持备份innodb; 也不支持增量备份。MyRocks_hotbackup支持流式备份

  MyRocks_hotbackup--user=root --port=3306 --checkpoint_dir=/data/backup --stream=xbstream| ssh$dst‘xbstream–x /data/backup’
#内部建立硬链接方式备份数据SST files,checkpoint多次更新,只备份新的SST files, 因此WAL日志很少,恢复时apply log时间很短
SET GLOBAL RocksDB_create_checkpoint= /path/to/backup

一些优化

  • bloom filter
    bloom filter一般适用于等值查询
    bloom filter信息存储在SST files中,大概占用2~3%的空间
    如果大量查询返回空集建议开启bloom filter,如果结果每次都在最底层找到,可以设置optimize_filters_for_hits=true关闭bloom filter以节省空间。

  • 数据加载
    数据加载时可以忽略唯一性约束检查,分段自动提交,停写wal等。
    以下是推荐的数据加载时的参数配置

    rocksdb_skip_unique_check=1
    rocksdb_commit_in_the_middle=1
    rocksdb_write_disable_wal=1
    rocksdb_max_background_flushes=40
    rocksdb_max_background_compactions=40
    rocksdb_default_cf_options=(in addition to existing parameters); write_buffer_size=128m;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;memtable=vector:1024
    rocksdb_override_cf_options=(in addition to existing parameters);__system__={memtable=skip_list:16}  
  • Reverse column families
    MyRocks擅长正向扫描,为了提高逆向扫描(ORDER BY DESC)的性能,MyRocks支持了Reverse column families。 在建表可以指定column family的reverse属性。

  • singleDelete
    如果key不会重复put, delete操作可以直接删除put,而不是标记删除。singleDelete可以提供查询效率。

一些限制

MyRocks目前有以下一些限制

    • 不支持分区表,Online ddl,外键,全文索引,空间索引,表空间transport

    • gap lock支持不健全(仅primary key上支持), 使用statement方式复制会导致不一致

    • 不支持select … in share mode

    • 大小写敏感,不支持*_bin collation

    • binlog与RocksDB之间没有xa,异常crash可能丢数据。所以,MyRocks一般开启semi-sync.

    • 不支持savepoint

    • order by 不比较慢

    • 不支持MRR

    • 暂不支持O_DIRECT

    • innodb和RocksDB混合使用还不稳定

MyRocks简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. JS之函数表达式

    度过一个愉快短暂的周末,又可以开始学习了!我爱学习,学习使人进步.今天学习函数表达式,着重学习下闭包函数. 函数表达式 可以在定义的函数声明之前调用它,但是不能在定义函数表达式之前调用它 /** * ...

  2. css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况

    原文地址: http://blog.csdn.net/jyy_12/article/details/42557241 px:绝对单位,页面按精确像素展示 em:相对单位,基准点为父节点字体的大小,如果 ...

  3. jdk8 Lambda表达式与匿名内部类比较

    Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...

  4. 配置文件keepalived.conf详解

    keepalived.conf       一个功能比较完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三个文本块:全局定义块.VRRP 实例定义块及虚拟服务 ...

  5. 3. Builder(建造者)

    意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用性: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同 ...

  6. 20145202、20145225、20145234 《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验

    实验内容 1.配置环境 2.使用vi 编辑器阅读理解源码 2.编译应用程序 运行 make 产生可执行文件httpd 3.下载调试 使用 NFS 服务方式将HTTPD 下载到开发板上,并拷贝测试用的网 ...

  7. 在rails中 Rendering Partials through Ajax

    之前做.net的时候,自己做了一个showcontent的插件,用来加载页面的局部partial 之前采用的是ashx的方式 但rails里面不太方面,今天找到一个比较好的方法,试验成功 起初网上找到 ...

  8. html中的标签

    1.<big></big>定义大字体的文字 2.<blockquote>标记长的引用:</blockquote>请注意,浏览器在 blockquote ...

  9. 通过实现Countable接口来调用count函数

    周六我一大早就来到公司,还有些客户工作没有收尾,还有写文档没写,还有写计划需要完善,我得抓紧.到了下午我发现大家陆陆续续的都到公司来了,有几个兄弟一来就开始工作了,每当有人自愿投入某一项工作时,我基本 ...

  10. PWM波控制舵机总结

    文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的一套 ...