1

我有一个案例,我需要在 Cassandra 中记录用户操作,然后检索在任意时间段内具有最多该操作的用户的排序列表。

任何人都可以建议一种以预聚合方法存储和检索这些数据的方法吗?

4

1 回答 1

1

在 Cassandra 之外,我建议使用stream-summary或 count min sketch,您可以用更少的空间解决这个问题并立即获得结果。只需更新并定期序列化并持久化它(假设您不需要保证准确性)

在 Cassandra 中,您可以在每个时间段(例如按小时)保留一行,并在该行中为每个用户设置一个计数器,并在使用时递增它们。然后使用批处理作业来遍历它们并找到重击者。您将被限制为最小可查询时间为 1 小时,并且计算起来不会特别便宜或快速,但它会起作用。

通常,最好将这些视为操作日志,每次有一个事件存储它并让批处理作业使用 hadoop 或自定义对其进行分析。如果需要实时 id,建议使用上述将流摘要保存在内存中的方法。

于 2013-08-30T18:22:51.370 回答