分页时MutliGet或多个Get操作

时间:2013-01-25 15:15:25

标签: cassandra

我有一个宽列系列用作'时间轴'索引,其中列名是时间戳。为了防止热点,我按月对CF进行分片,以便每个月在CF中都有自己的行。

我向CF查询两个日期之间的切片范围,并根据每页的页面记录限制返回的列数,比如10。

问题是,如果我的日期范围跨越几个月,即使第一行中有10个匹配列,我也会从每行返回10列 - 从而满足我的分页要求。

我可以看到这里的逻辑,但是当我只需要前10个匹配的列而不管它们跨越多少行时,如果我必须从可能的多个节点中检索冗余记录,它会让我感到非常低效。

所以我的问题是,如果我的第一次调用没有返回10条记录并继续直到我有所需的否,我最好在第一行上执行单个Get操作然后在第二行执行另一个Get操作。记录(或命中行限制),或只是接受冗余并转储不需要的记录?

1 个答案:

答案 0 :(得分:1)

我会对您的查询进行采样并记录为每个查询获取的行数,以获得10个结果并构建这些数字的直方图。然后,根据直方图,计算出需要一次获取多少行才能完成,例如,只需要一次查询就可以完成90%的查询到Cassandra。这至少是一个好的开始。

如果您几乎总是需要获取多行,请考虑将时间轴拆分为比一个月更大的块。或者,如果您想采取更灵活的方法,请根据每个时间线的流量使用不同的存储桶大小:http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra(请参阅“可变时间存储桶大小”部分)。