row cache中的数据是什么形式的?

【 使用环境 】 测试环境
【 OB or 其他组件 】
OB Server
【 使用版本 】
OceanBase_CE 4.2.2.0

【问题描述】
KVCache中的row cache以及block_cache是以什么形式存储在内存中的?
1、解码后最原始的数据
2、解压后的编码数据
3、未解压,保存在磁盘上的数据

我有一个表,原表大小10G,编码后1.6G,压缩后1G左右,对他进行100万次点查。最后KVCACHE中缓存的数据均大于1.6G。

【复现路径】无
【附件及日志】无

KVCache中的row cache以及block_cache 是重新组织过的内存数据,和原始数据以及磁盘中的数据都不太一样。

也不是编码后的大小是吗?感觉内存占用特别大

不是编码后的大小,cache中的数据是经过组织过的。为了加快查询,比编码后的数据大是正常的。

往深点说:cache 为快速定位 kv 的位置,维护了一个 hashmap ( 称为 Cache Map ),cache 每存入一个 kv ,会在 Cache Map 中新增一个 node 与之对应,其中保存指向 kv 的指针。 在 get kv 时,首先根据 key 的 hash 值定位 Cache Map 中的 bucket ,bucket 中存了一个 node 链表,再遍历 node 链表找到对应的 node ,从 node 读取对应的 kv 。