博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL · myrocks · fast data load
阅读量:7041 次
发布时间:2019-06-28

本文共 1558 字,大约阅读时间需要 5 分钟。

Fast data load

Load data相比普通insert效率更高,Load data批量插入数据有效减少了解析SQL的开销。MyRocks 同其他MySQL 引擎一样也支持Load data语法,同时MyRocks对data load也做了特殊优化。RocksDB引擎有一个规律是,数据最终会存储在最底层SST文件中,MyRocks通过参数rocksdb_bulk_load控制是否直接将数据存储在最底层SST文件中,而不走普通的insert流程。

先来看下普通insert流程(图片来自yoshinorim)

screenshot.png

优化后的bulk load流程(图片来自yoshinorim)

screenshot.png

由于SST文件中的数据必须是有序的,所以 bulk load特性有一个限制是插入的数据必须是按主键有序的。

Insert和Load data都支持bulk load特性,Load data文件中的数据容易保证有序,但对于非自增insert来说,要保证有序插入比较困难,因此bulk load特性对普通insert意义不大。

rocksdb_bulk_load设为1后,开启bulk load特性。值得注意的是,在 bulk load特性下,会默认忽略唯一性检查,同时rocksdb_commit_in_the_middle自动开启。

Bulk load 源码实现

  • step 1 第一次插入时会新建SST临时文件, 参见myrocks::Rdb_sst_info::open_new_sst_file

    文件形如:test.t1_PRIMARY_0_0.bulk_load.tmp
    db.tablename_indexname_count1_count2_.bulk_load.tmp
    其中count1每次都会原子自增,防止并发load时出现重名的情况。
    其中count2表示当前是第几个SST临时文件

  • step 2 随后插入都会直接插入到SST临时文件中,参见myrocks::Rdb_sst_info::put

  • step 3 SST临时文件写满或load结束,将SST临时文件copy或hard link为正式的SST文件,同时更新SST元数据信息,参考rocksdb::ExternalSstFileIngestionJob::Prepare/ExternalSstFileIngestionJob::Run

  • step 4 删除临时SST文件,参考ExternalSstFileIngestionJob::Cleanup

如果bulk load中途mysqld crash有可能残留SST临时文件,mysqld重启时会自动清理SST临时文件。参考Rdb_sst_info::init

Bulk load 相关测试

load data 测试

Bulk load下rocksdb load data比innodb快近3倍。

Bulk load下rocksdb load data比rocksdb 普通load data快近6倍。

screenshot.png

perf top

可以看出bulk load模式下,插入流程要简洁很多。

  • rocksdb without bulk load

    屏幕快照 2017-05-16 上午1.14.05.png

  • rocksdb with bulk load

    屏幕快照 2017-05-16 上午1.08.27.png

insert 测试

由于SQL解析占比重较大,bulk load模式下的insert优势并不明细。

screenshot.png

perf top

可以看出普通insert相比load data有更多的SQL解析操作(MySQLparse),同时非bulk load下的insert比bulk load下insert有更多的排序操作(KeyComparator)。

  • insert without bulk load

    屏幕快照 2017-05-16 上午12.45.54.png

  • insert with bulk load

    屏幕快照 2017-05-16 上午12.51.43.png

转载地址:http://dxaal.baihongyu.com/

你可能感兴趣的文章
新书《JavaScript面向对象编程指南(第2版)》
查看>>
HTML5跨域开发
查看>>
CDH 5.2中Impala认证集成LDAP和Kerberos
查看>>
SpringBoot之整合Spring Security,为自己的系统提供安全保障
查看>>
DockerCon 巴塞罗那站即将开幕,精彩内容不容错过!
查看>>
MD5Utils 简单计算MD5
查看>>
7月27日云栖精选夜读丨阿里巴巴机器翻译在跨境电商场景下的应用和实践
查看>>
你所不知道的setTimeout
查看>>
京信通信:数据智能为生产调试“增效瘦身”
查看>>
「实用教程」登录失败超过一定次数如何锁定帐号?
查看>>
java创建线程的三种方式
查看>>
ElasticSearch DSL Script使用案例分享
查看>>
你真的懂JavaScript计时器吗?
查看>>
CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:...
查看>>
游乌镇
查看>>
使用Akka持久化——持久化与快照
查看>>
springboot之RMI的使用
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)
查看>>
openstack 云服务上创建的虚拟机,主机名修改
查看>>
css3 贝塞尔曲线cubic-bezier(x1, y1, x2, y2)
查看>>