cassandra - 在不接触磁盘的情况下检查密钥是否存在
问题描述
我们的 Cassandra 设置达到了 IO 限制。我想知道是否有一种方法可以在不接触磁盘的情况下检查某个键是否存在。我知道密钥缓存,但内存使用量对我们来说相当多。此外,我了解到 Cassandra 使用布隆过滤器进行索引扫描。有没有办法通过 Cassandra 的内部设置来测试密钥的存在?
解决方案
我不知道你在说什么索引扫描。如果已填充,keycache 将确定磁盘上是否存在密钥。
每个 sstable 都有一个内存中的布隆过滤器和一些可以提供帮助但不能保证的元数据。布隆过滤器会确定它是否不存在,但可能会给出误报。您可以查看相关统计数据,并设置误报百分比目标。此外,每个 sstable 都有一个最小/最大令牌和最小/最大集群密钥,如果您的密钥不存在,也可以将其排除在可能之外。
不幸的是,如果不实际执行读取,您将无法执行此操作,因此一旦找到 sstable,它将尝试从中读取。你可以做一个LIMIT 1
至少最小化它。您还可以在您的应用程序中放入您知道存在或不存在的密钥的缓存,如果您认为它可能不同步的话。以及一些在添加或删除时驱逐它们的机制。
推荐阅读
- .htaccess - 将“子文件夹”重定向到新 URL;Joomla 和 .htaccess
- javascript - React Native 后台计时器永不停止
- sql - 将 2 个表合并为 1 个(SQL Server)的最佳方法是什么,只有一个共同的日期时间类型的列
- postgresql - 复制数据或将数据从 CSV 导入 PostgreSQL 时出错
- python - 将列表与 CSV 文件进行比较
- python - Value_counts 未返回所需的输出
- php - 访问部署在共享主机上的公共目录 laravel 5.5
- javascript - Vue:如何在 mapFields 中使用组件道具
- python-3.x - 从 Target 抓取产品和商店信息
- linux-mint - 如何在 Linux Mint 中正确构建 RTEMS 4.11 环境