2

我们有一个活动指标页面,用户可以在其中选择一个日期期间并查看其他用户的汇总活动(按操作),并可选择按 4 或 5 个字段过滤所有内容。动作按顺序发生,但其中一个字段是Tags,用户可以随时更改旧动作的标签。数据位于 Cassandra 3.7 中,分区键为(company_id, action_year, action_week). 每周我们有大约 70k 个操作(每个操作有 20 列带有longint数据,每个操作都带有分区键 plusaction_timestampaction_key行键)。

PRIMARY KEY ((company_id, action_year, action_week), action_date, action_key)
) WITH CLUSTERING ORDER BY (action_date ASC, action_key ASC)

在第一个版本中,我们查询一段时间内的完整操作,并在内存中进行所有聚合和过滤。当用户选择几个星期时,整个请求大约需要 10 或 15 秒。我们预计将扩展到成千上万请求这些分析的用户,这些分析应该可以作为近乎实时的分析。

我们曾想过使用“允许过滤”将过滤移至 C*,但 WHERE 子句似乎非常有限。我们也担心标签的频繁更新。

在这里使用 C* 的正确方法是什么?

4

1 回答 1

1

由于您使用的是 Cassandra 3.7,因此您应该考虑使用 SASI。这是一项更新的功能,允许在 Cassandra 中使用更强大的二级索引。文档可在此处获得。

但由于这是一项新功能,请确保您针对您的用例对其进行全面测试,并真正深入研究索引的操作以确保您的用例非常适合。

另一篇好文章是这篇预览文章。

于 2016-10-29T20:47:01.077 回答