我们有一个活动指标页面,用户可以在其中选择日期并查看其他用户的聚合活动(通过操作),并可选择按4或5个字段过滤所有内容。操作按顺序执行,但其中一个字段为Tags
,用户可以随时更改旧操作的标记。数据位于Cassandra 3.7中,分区键为(company_id, action_year, action_week)
。对于每周,我们有大约70,000个操作(每个操作有20个列包含long
或int
数据,每个操作都带有分区键加action_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 *的正确方法是什么?
答案 0 :(得分:1)
由于您使用的是Cassandra 3.7,因此您应该考虑使用SASI。它是一个更新的功能,允许在Cassandra中使用更强大的二级索引。文档可用here。
但是,这是一个新功能,请确保您完全测试它的用例并真正深入了解索引的操作,以确保您的用例非常适合。
另一篇好文章是this preview one。