当多个sstables中存在相同的密钥时,cassandra密钥缓存如何工作?

时间:2012-06-19 12:07:30

标签: caching cassandra

1)根据datastax密钥缓存存储rowkey的主键索引。

2)在我们的例子中,我们为密钥缓存分配了足够的内存,并且在具有不同列的多个sstables中存在相同的密钥。

3)如果没有调用从多个sstables访问所有这些相同的密钥,那么索引如何存储在密钥缓存中?它会存储所有sstables的索引还是仅存储最近访问密钥的最后一个sstable?

1 个答案:

答案 0 :(得分:5)

来自Doc

  

密钥缓存在每列的内存中保存密钥的位置   家庭基础。

键缓存用作所有sstable中键的索引。

每个sstable维护密钥缓存。因此,密钥缓存可以为每个SSTable [最小]节省一个磁盘搜索。每个键查找最终都会击中所有sstable的bloom过滤器。成功时,验证密钥缓存只是为了跳过sstable索引[指向密钥样本@默认为127的间隔]查找。

读取cassandra的路径就像这样

Memtable - >行缓存(关闭堆) - >布隆过滤器 - >密钥缓存 - > SSTable Index [如果错过] - > 磁盘

以粗体显示的所有内容都意味着它们在内存中保存(在堆中或堆中)。因此,它们不会累加到磁盘搜索

每个sstable都应该维护自己的密钥缓存。来自第101张幻灯片的Souce和来自第23张幻灯片的Source2

使用密钥缓存未命中,使用sstable索引 - 这将给出密钥所在的第128个范围的线索。从那时起磁盘寻找关键开始[可以是1到多个]。

如果我得到任何关于cassandra如何确定每个sstable的密钥缓存大小可能是[key_cache_conf / no_of_sstables]的话,我会再次更新答案?