# RocksDB: 書き込み

![`smart`](RocksDBWrite01_aa_002_20220511.png)

------------------------------------------------------------------------------
RocksDBは、ログ構造化マージ（LSM）ツリーデータ構造を使用したキーバリューストレージエンジンです。LSMツリーにより、RocksDBはメモリにデータの挿入、変更、削除操作を効率的に処理し、バッチでディスクに書き込むことができます。LSMツリー構造はメモリとディスクの両方を横断し、MemTable、不変MemTable、SSTableなどのいくつかのコンポーネントから構成されています。

データの書き込み操作が行われると、RocksDBはまず`write-ahead logging`（WAL）ファイルにデータを書き込み、メモリ喪失の場合にも耐久性を確保します。その後、データはMemTableというメモリデータ構造に書き込まれます。MemTableは、データをフラッシュ操作のために保持するメモリデータ構造です。MemTableは、スキップリストや検索ツリーなどのデータ構造を使ってデータを整理します。MemTableは読み書きの両方に使用されます。新しい書き込み操作は常にMemTableにデータを挿入し、読み取り操作は常にMemTableを検索してからディスク上のSSTableを検索するため、MemTableのデータは常に最新の状態です。

MemTableがある特定のサイズ（write_buffer_sizeパラメーターによって制御される）に達すると、変換プロセス中に書き込み操作がブロックされないようにするために、不変なMemTableに変換されます。その後、新しいMemTableが新しい入力データを処理するために作成され、バックグラウンドスレッドが以前の不変なMemTableの内容をディスク上のSSTableファイルに書き込みます。データが書き込まれたら、MemTableと関連するWALファイルを削除できます。デフォルトでは、1つの不変なMemTableがディスク書き込み操作を引き起こし、5つの不変なMemTableが書き込みストールを引き起こします。

sync-log = true は、書き込み時に fsync を呼び出し、オペレーティングシステムのキャッシュではなく、WAL ログファイルをディスクに永続化することを示しています。


