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

时间:2016-03-10 04:26:00

标签: performance cassandra

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

  

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

没有。 Cassandra不会加载所有7 SSTables。每个SSTable都有一个BloomFilter(内存中),告知在SSTable中包含数据的可能性。

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

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

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

Cassandra Read path

另外还有一个行缓存,其中包含热行(频繁访问),如果在row cache中找到,则不会导致命中/加载SSTable。

浏览此rowcache链接以了解行缓存和分区密钥缓存。

Jeff Jirsa分享的另一篇精彩演讲,Understanding Cassandra Table Options。真的值得通过它。

另一方面,compaction会定期发生,以减少SSTable的数量,并根据tombstones删除行。