【发布时间】:2019-05-29 23:46:12
【问题描述】:
我们的 Cassandra 设置达到了 IO 限制。我想知道是否有一种方法可以在不接触磁盘的情况下检查某个键是否存在。我知道key cache,但内存使用量对我们来说相当多。另外,我了解到 Cassandra 使用bloom filters 进行索引扫描。有没有办法通过 Cassandra 的内部设置来测试密钥的存在?
【问题讨论】:
标签: cassandra
我们的 Cassandra 设置达到了 IO 限制。我想知道是否有一种方法可以在不接触磁盘的情况下检查某个键是否存在。我知道key cache,但内存使用量对我们来说相当多。另外,我了解到 Cassandra 使用bloom filters 进行索引扫描。有没有办法通过 Cassandra 的内部设置来测试密钥的存在?
【问题讨论】:
标签: cassandra
我不知道你在说什么索引扫描。如果已填充,keycache 将确定磁盘上是否存在密钥。
每个 sstable 都有一个内存中的布隆过滤器和一些可以提供帮助但不能保证的元数据。布隆过滤器会确定它是否不存在,但可能会给出误报。您可以查看相关统计数据,并设置误报百分比目标。此外,每个 sstable 都有一个最小/最大令牌和最小/最大集群密钥,如果您的密钥不存在,也可以将其排除在外。
不幸的是,如果不进行实际读取,您将无法执行此操作,因此一旦找到 sstable,它将尝试从中读取。您可以通过LIMIT 1 至少将其最小化。您还可以在您的应用程序中放入您知道存在或不存在的密钥的缓存,如果您认为它可能不同步的话。以及一些在添加或删除时驱逐它们的机制。
【讨论】: