caching - 当同一个 key 存在于多个 sstable 中时,cassandra key 缓存如何工作?

标签 caching cassandra

1)根据datastax键缓存存储rowkey的主键索引。

2) 在我们的例子中,我们为键缓存分配了足够的内存,并且相同的键存在于具有不同列的多个 sstables 中。

3) 如果没有调用从多个 sstables 访问所有这些相同的键,那么索引如何存储在键缓存中?它会存储所有 sstable 的索引还是只存储最近访问过的键的最后一个 sstable 的索引?

最佳答案

来自 Doc

The key cache holds the location of keys in memory on a per-column family basis.



键缓存用作所有 sstable 中键的索引。

每个 sstable 维护 key 缓存。因此, key 缓存可以为每个 SSTable [最小] 节省一次磁盘搜索。每个键查找最终都会至少命中所有 sstable 的布隆过滤器。成功时验证 key 缓存只是为了跳过 sstable 索引 [指向 key 样本的指针 @ 间隔默认为 127] 查找。

阅读 cassandra 的路径是这样的

Memtable -> Row Cache (Off heap) -> Bloom filter -> Key cache -> SSTable Index [if miss] -> 磁盘

所有以粗体显示的内容都表示它们保存在内存中(在堆中或堆外)。因此它们不加起来为磁盘搜索

每个 sstable 都应该维护自己的 key 缓存。 Souce来自第 101 号幻灯片和 Source2来自第 23 号幻灯片

如果 key 缓存未命中,则使用 sstable 索引 - 这将提供 key 可能位于第 128 个范围的线索。从那时起,磁盘寻找 key 开始[可以是 1 到多个]。

如果我得到有关 cassandra 如何决定每个 sstable 的 key 缓存大小可能是 [key_cache_conf/no_of_sstables] 的任何线索,我将再次更新答案?

关于caching - 当同一个 key 存在于多个 sstable 中时,cassandra key 缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100573/

相关文章:

java - IgniteCache 不调用 loadCache()

javascript - 不添加缓存 meta + php header 会导致 css/js 也不会缓存吗?

cassandra - Cassandra 3.0更新了SSTable格式

hadoop - 从 Cassandra 加载数据

cassandra - Apache Cassandra 从计数器中删除

闪存缓存问题

python - @lru_cache 装饰器过多的缓存未命中

php - 为什么要使用 MySQL 数据库缓存?

cassandra - 将相同的数据插入 cassandra 数据库

cassandra - 如何在cassandra中存储微秒级时间戳?