Outline
(1) RocksDB Overview
(2) LevelDB Overview
(3) LevelDB Architecture
(4) RocksDB Architecture と LevelDB Architecture の違い
(5) RocksDB Performance Measurement
(6) RocksDB とSSDの親和性
(7) コメント・所感
RocksDB Overview [1/2]
- 2013年にFaceBookから提案されたNo-SQL形式 (key-value形式) データベース
- backend データベースとして利用される
- 分散型アーキテクチャ、fail-over は重視していない
- LevelDBの派生
- LevelDBはアクセスエントリサイズがRAMサイズよりも小さいときに、アクセス遅延が小さい。RockDBは、RAMより大きいエントリでもアクセス遅延が小さい
- Contribution: メモリにのり切らない一次記憶、二次記憶のデータアクセス遅延を気にしないで高速アクセス可能なデータベースアーキテクチャ
RocksDB Overview Overview [2/2]
開発目標
1)マルチコアCPUを持つサーバーでの拡張性
2)高速なストレージの効果的利用
3)技術革新のための柔軟性
4)I/Oバウンドやインメモリ、ライトワンスなどの作業のサポート
LevelDB Architecture [1/2]
アクセス頻度を利用した階層的なデータストアアーキテクチャ
- Write
mentableとLog Fileにデータエントリ書き込み - flush/write
memtableがあふれたら SST (Sorted String Table) 書き込み - Read
memtableまたはSSTからエントリ読み込み(後述)
LevelDB Architecture Overview [2/2]
-
memtable
on-memoryにもつSST -
Log Files
Write処理で最初にエントリが格納されるファイル
閾値サイズ以上になると、SSTとして出力される -
SST (Sorted String Table)
keyでソートされたエントリを保存
階層的に管理されている
SSTがあるLevelで閾値サイズになると、次のLevelにSSTをマージする
Read 処理の補足(thanks to @tatsuya6502 さん)
- memtableとSSTにデータ自体が入っているため、RocksDBは、これらのテーブル位置を検索し、エントリを読み出す
- Read処理シーケンス
- bloom filterでエントリテーブル位置を探す
- 1でエントリが見つからなかった場合、降順のLevel別にパーティション検索する
※ パーティション検索とは - Level0意外のLevelでは、SSTが複数存在する。複数のSSTがある場合、RocksDBでは、ハッシュキーをベースにSSTをパーティションしている。これによって、キーの検索範囲が狭まり、高速なエントリ検索を実現している
RocksDB Architecture と LevelDB Architecture の違い
Pluggable: 部分的な欠損があっても、全体のパフォーマンスや運用に影響しない
(1) pluggable file format (コード変更無しで、データ圧縮方式の変更可)
(2) pluggable compaction (データ圧縮タイミングの柔軟性)
(3) plugable memtable (SSTの個別定義可能にする)
(4) allow different files on different storage (デバイス種別に依存しないファイル保存可能)
RocksDB Performance Measurement
公式サイトから評価リンク消失
RocksDB とSSDの親和性
-
Tunable between device wear-out and read latency
デバイス固有に発生するWrite/Read/Space Amplificationを隠蔽するようなチューニング可能 -
Pluggable
部分的なデバイス欠損にも対応可能なアーキテクチャ -
Optimized for fast storage
e.g., ロックフリーのRead, CPU負荷の最適化
コメント・所感
-
一次記憶、二次記憶媒体のアクセス遅延を意識させないアーキテクチャ構成
-
従来、SSD はRnd W/R性能が評価されてきたため、Rnd性能が求められるアプリがHDDの置き換えで使っているにすぎなかった
-
RocksDBは、SSDのRnd W/R性能に加えてSeq W/R性能の向上も全体パフォーマンス向上させる
-
SSDとの親和性を確かめるために、他のDBアーキテクチャとの比較もしたい
Reference
- "The History of RocksDB" post on November 24, 2013
http://rocksdb.blogspot.jp/ - "RocksDB Embedded Key-Value Store for Flash
and Faster Storage" presented in flash memory summit
http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2014/20140805_D12_Dong.pdf - "SSTable and Log Structured Storage: LevelDB" post on February 06, 2012
https://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/ - "LevelDB入門 (基本編)" from scratch
http://yosuke-furukawa.hatenablog.com/entry/2014/05/05/095207