我对cassandra有一点经验但是我有一个关于cassandra读取过程的查询。
假设我们的cassandra db中的给定表有7个sstables如果我们执行任何未在memtable中缓存的读取查询,那么Cassandra将查看sstables。我的问题是: -
在这个过程中,cassandra会将所有sstables(7)加载到memtable中,或者它只会查看所有sstables并在memtable中加载相关行而不是加载所有sstables?
提前感谢你!! 如果我解释错了,请纠正我。
如果有人可以解释/提及更好的资源来了解sstables的工作,那也会很棒。
答案 0 :(得分:7)
在此过程中,cassandra将加载所有sstables(7)
没有。 Cassandra不会加载所有7 SSTables
。每个SSTable
都有一个BloomFilter
(内存中),告知在SSTable
中包含数据的可能性。
如果BloomFilter指示可能在SSTable中包含数据,它会查看partition key cache
并获取compression offset map
(内存中)以检索具有我们正在查找的数据的压缩块对
首先,我认为这个Cassandra Reads链接应该有助于并以图形方式描绘流程。从上方链接捕获读取路径下方以便快速参考。
另外还有一个行缓存,其中包含热行(频繁访问),如果在row cache
中找到,则不会导致命中/加载SSTable。
浏览此rowcache链接以了解行缓存和分区密钥缓存。
Jeff Jirsa分享的另一篇精彩演讲,Understanding Cassandra Table Options。真的值得通过它。
另一方面,compaction
会定期发生,以减少SSTable的数量,并根据tombstones
删除行。