MySQL · myrocks · fast data load
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)
優化後的bulk load流程(圖片來自yoshinorim)
由於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倍。
perf top
可以看出bulk load模式下,插入流程要簡潔很多。
-
rocksdb without bulk load
-
rocksdb with bulk load
insert 測試
由於SQL解析占比重較大,bulk load模式下的insert優勢並不明細。
perf top
可以看出普通insert相比load data有更多的SQL解析操作(MySQLparse),同時非bulk load下的insert比bulk load下insert有更多的排序操作(KeyComparator)。
-
insert without bulk load
-
insert with bulk load
最後更新:2017-05-21 09:02:00
上一篇:
PgSQL · 應用案例 · "寫入、共享、存儲、計算" 最佳實踐
下一篇:
RocksDB · 特性介紹 · HashLinkList 內存表
WINDOWS中cmd的切換目錄cd命令失效
≪統計學習精要(The Elements of Statistical Learning)≫課堂筆記(一)
springmvc整合mybatis框架源碼 有代碼生成器 bootstrap html5 mysql oracle maven SSM
Java類集--Stack類
【入職阿裏】android 幾種開源框架的組合
HDU 1115 求多邊形重心
MySQL · 引擎特性 · InnoDB mini transation
Installation and Operation Guide for BigBench on MaxCompute Benchmarking Suite
固態激光雷達 2020 年量產, CEO 黃百海詳解 Trilumina 技術架構
《程序員的修煉——從優秀到卓越》一一1.2 今天上班可以放羊