1

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

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

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

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

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

4

1 回答 1

1

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

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

于 2013-01-28T05:23:00.387 回答