Cassandra读取如何与多个SSTable中的单列数据模型分区一起使用?

时间:2019-09-23 12:48:24

标签: cassandra

我们在Cassandra中使用了非常简单的键值数据模型,而分区键在17个SSTable中。我想了解在我们的具体案例中阅读是如何工作的。

如果我没有正确理解,一般的Cassandra读取将需要在内存表和不同的SSTables中搜索每个列的最新版本,直到它检索所有列并将它们合并。

由于SSTable是按时间排序的,并且我们的数据模型是单列的,所以理想情况下,我们的读取操作应该只命中包含分区键的最新SSTable,因为它将包含全部数据。

我们的读取操作会命中17个SSTable吗?还是只是包含搜索到的分区键的最新版本?

2 个答案:

答案 0 :(得分:2)

Cassandra将搜索所有它们,因为不确定哪一列存在(DML在单元级别发生,因此,执行对帐时可能存在变体)。读取是在分区级别完成的。但是,如果Cassandra知道分区键在某些键中不存在,则可以过滤掉sstables。因此,压缩对于最佳读取很重要-删除不必要的单元格。

答案 1 :(得分:1)

  

我们的读取操作会命中17个SSTable吗?还是只是包含搜索到的分区键的最新版本?

要补充吉姆的答案,卡桑德拉为此使用了一种称为布隆过滤器的东西。本质上,这是一个概率结构,可以告诉您以下两件事之一:

  • SSTable 可能包含请求的数据。

    OR

  • SSTable肯定不包含请求的数据。

这应该避免Cassandra不得不扫描所有17个SSTable。我的建议是在cqlsh中使用TRACING ON运行查询,它将告诉您需要浏览多少个SSTable。