关于kvcache的一些疑问

OceanBase中有关kvcache的一些疑问:
1、Table get和table scan的区别是什么?
2、Block cache和row cache的区别是什么,为什么缓存了微块的情况下还需要缓存行呢?
3、为什么 GET场景才会使用Fuse Row Cache和Row Cache,SCAN场景使用Block Cache?

  • TABLE SCAN 属于范围扫描,会返回 0 行或者多行数据。

  • TABLE GET 直接用主键定位,返回 0 行或者 1 行数据。

  • Block Cache:微块缓存。这部分内存是用来存放从磁盘上读取到的微块中的信息的,类似于数据库中常提到的buffer pool。

  • Row Cache:基线数据和转储数据的行数据缓存,在进行 Get/MultiGet 查询时,可能会将对应查到的数据行放入 Row Cache,这样在进行热点行的查询时,可以极大地提升查询性能。

2 个赞

所以row cache主要是数据在memtable和sstable中都存在版本,需要构造fuse row的时候才会使用吗?否则直接读sstable的block cache缓存就行了?