我们有一个活动指标页面,用户可以在其中选择一个日期期间并查看其他用户的汇总活动(按操作),并可选择按 4 或 5 个字段过滤所有内容。动作按顺序发生,但其中一个字段是Tags
,用户可以随时更改旧动作的标签。数据位于 Cassandra 3.7 中,分区键为(company_id, action_year, action_week)
. 每周我们有大约 70k 个操作(每个操作有 20 列带有long
或int
数据,每个操作都带有分区键 plusaction_timestamp
和action_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* 的正确方法是什么?