Cassandra密钥缓存

时间:2018-08-29 11:50:40

标签: cassandra

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

1 个答案:

答案 0 :(得分:1)

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

密钥缓存也不存储所有数据,仅存储被认为可能基于Window TinyLfu算法命中的数据。一个表中可能有数十亿个键,因此它无法存储所有键。密钥缓存的缺失不能确保它不存在,因此无论如何都必须检查Bloom筛选器。还要注意一点,BF检查在内存中并且非常快。如果BF通过,它将接下来检查缓存。在此之前,它实际上还根据sstable中的列和标记的范围进行过滤,并跳过其数据将被最小/最大时间戳记为逻辑的那些(请参阅queryMemtableAndDiskInternal)。