# RocksDB クエリー

![`smart`](RocksDBQuery_aa_001_20220511.png)

-------------------------------------------------------------------
RocksDBは、ディスク上にデータを格納するためにログ構造マージツリー（LSMツリー）データ構造を使用します。これにより、効率的な書き込みと高速なポイントルックアップが可能になります。しかし、読み取り操作は、与えられたキーの最新のデータを見つけるために複数のSSTファイルを逆順にイテレートする必要があるため、遅くなる可能性があります。

RocksDBは、読み取り操作のパフォーマンスを向上させるために、SSTファイル内にキーが存在するかどうかをすばやく判断するためにブルームフィルターを使用します。ブルームフィルターとは、要素が集合のメンバーかどうかを効率的にテストすることができる確率的データ構造です。それは非常にスペース効率が良く、クエリを高速に行うことができる利点がありますが、一定の誤検出率を持つため、時に誤った陽性結果（すなわち、キーが実際にSSTファイル内に存在しないにもかかわらず、キーが存在すると指摘する可能性がある）を返すことがあります。

RocksDBは、ブルームフィルターを使用するだけでなく、内部機能としてブロックキャッシュというものも持っています。これは、頻繁にアクセスされるデータを格納するためのメモリ上の空間です。読み取り操作が行われると、RocksDBはまずブロックキャッシュを確認し、データが存在するかどうかを確認します。データが存在する場合、そのデータが即座に返されます。存在しない場合は、上記のようにMemTableから読み取り操作が開始され、SSTファイルを逆順に反復します。

全体的に、ブルームフィルタとブロックキャッシュの組み合わせにより、RocksDBは、大量のデータを扱う場合でも、効率的かつ迅速に読み取り操作を行うことができます。