2012-06-19 24 views
4

1)根据datastax密钥缓存存储rowkey的主键索引。当多个sstables中存在相同的密钥时,cassandra密钥缓存如何工作?

2)在我们的例子中,我们有足够的内存分配给密钥缓存,同一个密钥存在于具有不同列的多个sstable中。

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

+0

我已经正确更新了答案。如果现在清楚,Plz让我知道。 – Tamil

回答

5

Doc

键缓存持有密钥的存储在每列 家庭基础的位置。

密钥缓存用作所有安全密钥存在的索引。

按sstable维护密钥缓存。因此,密钥缓存可以为每个SSTable [最小值]保存一次磁盘搜索。每个关键字查找最终都会击中所有sstable的布隆过滤器。在成功时,密钥缓存被验证仅仅是跳过sstable索引[默认情况下关键示例@间隔为127的指针]查找。

卡桑德拉

读取路径是这样的

的memTable - >行高速缓存(关堆) - >布隆过滤器 - >键缓存 - >的SSTable指数[如果小姐] - >磁盘

一切用黑体表示它们保存在内存中(堆中或堆外)。因此,他们不加起来寻求磁盘

每个sstable应该维护自己的密钥缓存。 Souce from slide no 101 and Source2 from slide no 23

使用键盘缓存未命中,sstable索引被使用 - 这将提供关于哪个键可能位于第128个范围的线索。然后从磁盘寻找密钥开始[可以是1到很多]。

我会再次更新答案,如果我得到任何线索cassandra如何描述每个sstable的密钥缓存大小可能是[key_cache_conf/no_of_sstables]?

+0

谢谢泰米尔人!你介意我是否要求一个可核查的来源... – samarth

+0

@samarth你的意思是可证实的来源是什么?我已经在答案中提到了文档资源。即使'键盘缓存可以节省一个磁盘寻道每个SSTable'这是从文档 – Tamil

+0

我希望你的陈述的来源“键盘缓存作为它存在的所有sstables中的键索引”任何链接或文档或源代码将很有帮助。 – samarth