Cassandra密钥缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cassandra密钥缓存相关的知识,希望对你有一定的参考价值。

Cassandra密钥缓存是一个映射结构,其中键是{sstable_file_descriptor + partition_key},值是分区偏移量,现在为什么Cassandra在读取时检查所有sstables(使用bloom过滤器),如果数据可能存在于该稳定值中。为什么密钥缓存不能像partition_key = sstable_file_descriptor + offset

答案

它实际上是(tableid, indexName, descriptor, partition_key)(KeyCacheKey扩展了CacheKey)。相同的分区键可以存在于多个表上,也可以存在于多个表中的多个sstable上。为了仅通过密钥进行密钥,您需要额外的结构,这将是更多的协调和争用。

密钥缓存也不存储所有数据,只考虑可能基于Window TinyLfu算法获得命中的内容。单个表中可能存在数十亿个键,因此无法将它们全部存储起来。缺少密钥缓存并不能确保它不存在,因此无论如何都必须检查bloom过滤器。需要注意的是,BF检查在内存中非常快。如果BF通过则接下来检查缓存。在此之前,它实际上还会根据sstable中的列和标记的范围进行过滤,并跳过其数据将被最小/最大时间戳记录下来的数据(请参阅queryMemtableAndDiskInternal)。

以上是关于Cassandra密钥缓存的主要内容,如果未能解决你的问题,请参考以下文章

如果不存在,cassandra 创建密钥空间不起作用

Kafka 接收器错误“此连接器要求来自 Kafka 的记录包含 Cassandra 表的密钥”

从 Cassandra 填充缓存的正确方法

如何使用Apache Flink阅读Cassandra?

Solr与Cassandra二级缓存实践

Cassandra 行缓存大小增加但未接收行请求