首页 > 解决方案 > 在不接触磁盘的情况下检查密钥是否存在

问题描述

我们的 Cassandra 设置达到了 IO 限制。我想知道是否有一种方法可以在不接触磁盘的情况下检查某个键是否存在。我知道密钥缓存,但内存使用量对我们来说相当多。此外,我了解到 Cassandra 使用布隆过滤器进行索引扫描。有没有办法通过 Cassandra 的内部设置来测试密钥的存在?

标签: cassandra

解决方案


我不知道你在说什么索引扫描。如果已填充,keycache 将确定磁盘上是否存在密钥。

每个 sstable 都有一个内存中的布隆过滤器和一些可以提供帮助但不能保证的元数据。布隆过滤器会确定它是否不存在,但可能会给出误报。您可以查看相关统计数据,并设置误报百分比目标。此外,每个 sstable 都有一个最小/最大令牌和最小/最大集群密钥,如果您的密钥不存在,也可以将其排除在可能之外。

不幸的是,如果不实际执行读取,您将无法执行此操作,因此一旦找到 sstable,它将尝试从中读取。你可以做一个LIMIT 1至少最小化它。您还可以在您的应用程序中放入您知道存在或不存在的密钥的缓存,如果您认为它可能不同步的话。以及一些在添加或删除时驱逐它们的机制。


推荐阅读