【问题标题】:How exactly Cassandra read procedure works?Cassandra 读取程序究竟是如何工作的?
【发布时间】:2016-03-13 20:13:44
【问题描述】:

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

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

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

提前谢谢你!! 如果我的解释有误,请纠正我。

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

【问题讨论】:

    标签: performance cassandra


    【解决方案1】:

    在这个过程中,cassandra 会加载所有的 sstables(7)

    没有。 Cassandra 不会加载所有 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 分享了另一个精彩的演讲,Understanding Cassandra Table Options。真的值得一试。

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

    【讨论】:

    • @Aaron 谢谢亚伦。很高兴你喜欢我的回答:)
    • 这个答案很棒,所以我没有重新回答它,而是要补充一点,其中很多操作是可配置的(bloom 过滤器精度、索引阈值、压缩块大小)- 谈到在最近的 C* 聚会上介绍了他们中的许多人:slideshare.net/JeffJirsa1/…
    • @JeffJirsa 感谢分享链接。幻灯片很棒。我已经添加到答案中,因为它真的会帮助用户社区。​​span>
    猜你喜欢
    • 2012-06-12
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    • 2011-10-11
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多