缓存机制 
=========================



由于很多数据存储于 SSTable，为了加速查询，我们需要对数据进行缓存。OceanBase 数据库并不需要对缓存的大小进行设置，类似于 Linux 对于 page cache 的控制策略，OceanBase 数据库会尽量使用租户的内存，直到租户的内存达到一定阈值后，才会触发对 Cache 的淘汰。同时 OceanBase 数据库也是一个多租户系统，对于每一个租户都会有各自的 Cache，但 OceanBase 数据库会对所有租户的缓存进行统一管理。

OceanBase 数据库有许多种不同类型的 cache，具体类型如下：

* Block Cache

  类似于 Oracle 的 Buffer Cache，缓存具体的数据块，实际上 Block Cache 中缓存是解压后的微块，大小是变长的。
  




<!-- -->

* Block Index Cache

  缓存微块的索引，类似于 BTree 的中间层，在数据结构上和 Block Cache 有一些区别，由于中间层通常不大，Block Index Cache 的命中率通常都比较高。
  




<!-- -->

* BloomFilter Cache

  BloomFilter 是一种结构，可以帮助加速对空查询的过滤，有助于提升 insert 的性能。OceanBase 数据库的 BloomFilter 是构建在宏块上的，按需自动构建，当一个宏块上的空查次数超过某个阈值时，就会自动构建 BloomFilter，并将 BloomFilter 放入 Cache。
  




<!-- -->

* Row Cache

  Row Cache 缓存具体的数据行，在进行 Get/MultiGet 查询时，可能会将对应查到的数据行放入 Row Cache，这样在进行热点行的查询时，就可以极大地提升查询性能。
  




<!-- -->

* Partition Location Cache

  Partition Location Cache 用于缓存 Partition 的位置信息，来帮助对一个查询进行路由。
  




<!-- -->

* Schema Cache

  Schema Cache 缓存数据表的元信息，用于执行计划的生成以及后续的查询。
  




<!-- -->

* Clog Cache

  Clog Cache 缓存 clog 数据，用于加速某些情况下 Paxos 日志的拉取。
  



