卡桑德拉阅读程序究竟是如何运作的?

Ano*_*ous 1 performance cassandra

我对cassandra有一点经验但我有一个关于cassandra读取过程的查询.

假设我们的cassandra db中的给定表有7个sstables如果我们执行任何未在memtable中缓存的读取查询,那么Cassandra将查看sstables.我的问题是: -

在这个过程中,cassandra会将所有sstables(7)加载到memtable中,或者它只是查看所有sstables并将在memtable中加载相关的行而不是加载所有sstables?

提前感谢你!! 请纠正我如果我解释错了.

如果有人可以解释/提及更好的资源来了解sstables的工作,这也会很棒.

Mad*_*apu 7

在此过程中cassandra将加载所有sstables(7)

不,卡桑德拉不会加载全部7 SSTables.每个SSTable都有一个BloomFilter(内存中)告诉可能有数据SSTable.

如果BloomFilter指示在SSTable中存在数据的可能性,它会查看partition key cache并获取compression offset map(内存中)以检索具有我们正在查找的数据的压缩块.

  • 如果在分区键高速缓存中找到,则读取压缩块(I/O)以获取数据.
  • 如果未找到,它会查看分区摘要以获取索引条目的位置并将该位置(I/O)读入内存并继续使用压缩偏移映射流.

首先,我认为这个Cassandra Reads链接应该有助于并以图形方式描绘流程.从上方链接捕获读取路径下方以便快速参考.

卡桑德拉阅读路径

还有一件事,还有一个包含热行(经常访问)的行缓存,如果在row cache.中找到,这将不会导致命中/加载SSTable .

通过此rowcache链接了解行缓存和分区键缓存.

Jeff Jirsa分享的另一篇精彩演讲,了解Cassandra表选项.真的值得通过它.

另一方面,有compaction定期发生的事情是减少SSTable的数量并删除基于的行tombstones.