# Bitcask Bitcask は [[Riak]] で使用されるストレージエンジンの1つであり、順序付けされていないログ構造化ストレージエンジンである[SHEEHY10b]。これまでの LSM ツリー実装と異なり、バッファリングに memtable を使用せず、データレコードを直接ログファイルに格納する。 値を検索できるようにするために keydir と呼ばれるインメモリの HashMap を使用する。keydir は対応するキーの最新のデータレコードへの参照だけを保持し、古いデータレコードがディスク上に残っていても keydir からは参照されず、コンパクション時にガベージコレクションで処理される。keydir は起動時にログファイルから再構築する必要がある。 書き込み時はキーとデータレコードをシーケンシャルにログファイルへ追加し、新しく書き込まれたデータレコードの場所へのポインタを keydir に配置する。keydir 内のキーに対応する値は常に1つしか存在しないため、ポイントクエリは複数ソースのマージを必要としない。 利点は単純性とポイントクエリ性能の高さである。欠点は、すべてのキーをメモリ内に保持しなければならない点(ユースケースによっては使用に耐えない制約になりうる)と、範囲クエリのサポートがまったく得られない点(keydir・データファイルのいずれも項目が順序付けされていないため)である。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]] §7.4.1) ## 関連 - ソース: [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]] - 概念: [[LSMツリー]] - エンティティ: [[Riak]] / [[WiscKey]](Bitcask の2つの問題を解決する後継設計) ## 出典 - [[@2021__OReillyJapan__詳説 データベース - Chapter 7 ログ構造化ストレージ]](§7.4.1 Bitcask — keydir とデータファイルのマッピング、ポイントクエリ性能、範囲クエリ非対応)