# RocksDB 查询

![`smart`](RocksDBQuery_aa_001_20220511.png)

-------------------------------------------------------------------
RocksDB 使用日志结构合并树（LSM 树）数据结构在磁盘上存储数据，这允许高效的写入和快速的点查找。但是，读取操作可能会很慢，因为它涉及以相反顺序遍历多个 SST 文件以找到给定键的最新数据。

为了提高读取操作的性能，RocksDB使用布隆过滤器快速确定给定的SST文件中是否存在某个键。布隆过滤器是一种概率数据结构，可以有效地测试某个元素是否属于某个集合。它具有空间效率高和查询速度快的优点，但它也有一定的误报率，这意味着它偶尔会返回一个误报结果（即，它可能指示某个键存在于SST文件中，但实际上并不存在）。

除了使用布隆过滤器，RocksDB还有一个内部特性叫做块缓存，它是一个内存空间，用来存储经常访问的数据。当执行读操作时，RocksDB首先检查块缓存，看看数据是否存在那里。如果存在，则立即返回数据。如果不存在，则读操作按照上述描述继续进行，从MemTable开始，并以相反的顺序迭代SST文件。

总的来说，Bloom 过滤器和块缓存的结合使得 RocksDB 能够高效快速地执行读取操作，即使处理大量数据也是如此。