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密钥缓存的主要内容,如果未能解决你的问题,请参考以下文章