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

sam*_*rth 4 caching cassandra

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

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

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

Tam*_*mil 5

来自Doc

密钥缓存以每列系列为基础保存密钥在内存中的位置.

密钥缓存用作其存在的所有sstable中的密钥的索引.

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

阅读Cassandra的路径是这样的

Memtable - >行缓存(Off heap) - > Bloom过滤器 - > Key cache - > SSTable Index [if miss] - > Disk

大胆的一切意味着它们被保存在内存中(在堆中或堆中).因此,他们不会加起来寻求磁盘

每个sstable都应该维护自己的密钥缓存.烃源从幻灯片没有101和源2从滑动23没有

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

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