430.数据读取(memtable+SStables)

为了满足读 cassandra 读取的数据是 memtable 中的数据和 SStables 中数据的合并结果。读取SSTables 中的数据就是查找到具体的哪些的 SSTables 以及数据在这些 SSTables 中的偏移量(SSTables 是按主键排序后的数据块)。首先如果 row cache enable 了话,会检测缓存。缓存命中直接返回数据,没有则查找 Bloom filter,查找可能的 SSTable。然后有一层 Partition key cache,找 partition key 的位置。如果有根据找到的 partition 去压缩偏移量映射表找具体的数据块。如果缓存没有,则要经过 Partition summary,Partition index 去找 partition key。然后经过压缩偏移量映射表找具体的数据块。

  1. 检查 memtable
  2. 如果 enabled 了,检查 row cache
  3. 检查 Bloom filter
  4. 如果 enable 了,检查 partition key 缓存
  5. 如果在 partition key 缓存中找到了 partition key,直接去 compression offset 命中,如果没有,检查partition summary
  6. 根据 compression offset map 找到数据位置
  7. 从磁盘的 SSTable 中取出数据