大佬们。Row Cache和Block Cache有什么区别?

大佬们。Row Cache和Block Cache有什么区别?

3 个赞

Row Cache 和 Block Cache 是 OceanBase 存储引擎中两种核心的多级缓存,它们最主要的区别在于缓存的数据粒度服务的业务场景不同。

可以将它们之间的区别理解为“查词典”:

  • Block Cache (块缓存):就像你手边的一本厚词典。当你需要查某个词时,会先把包含这个词的整页或整段内容(一个数据块)从磁盘拿到内存里供查阅。
  • Row Cache (行缓存):更像是你为了方便,把刚才查到的那个词的具体解释(某一行数据)单独抄在一张便利贴上。如果下次还要看这个词,直接看便利贴就行,不用再翻厚重的词典。

更具体的区别,可以看看这张表:

特性维度 Block Cache (块缓存) Row Cache (行缓存)
缓存粒度 数据块 (Block/Microblock)。以“块”为单位整体缓存,粒度较粗。 数据行 (Row)。只缓存单独的一行数据,粒度非常细。
主要场景 OLAP 分析型查询、大范围数据扫描。适合需要读取大量连续数据的场景。 OLTP 事务型查询、Get/MultiGet 小查询。尤其适合通过主键或唯一键频繁访问的热点行。
数据形式 缓存的是从 SSTable 中读取的、经过解压后的微块(Microblock)。 缓存的是从数据块中解析出来的、或经过多个 SSTable 数据**熔合(Fuse)**后的最终数据行。
核心优势 减少磁盘 I/O,利用数据局部性原理,一次读取,多次使用块内数据。 避免重复解析数据块,对于热点行的访问速度极快,接近内存数据库的性能。
类比理解 就像一本摊开放在桌上的厚重词典,查词前需要先翻到对应的页面(读取数据块)。 就像贴在桌上的便利贴,上面已经写好了你常查的那个词的详细解释(缓存好的数据行)。