【发布时间】:2020-06-18 14:52:40
【问题描述】:
我有 Kafka 流,其中包含用户与网站的交互,因此每个事件都有一个时间戳和有关该事件的信息。对于每个用户,我想将最后 K 个事件存储在 Cassandra 中(例如 100 个事件)。
我们的网站不断遇到机器人/重度用户,这就是我们想要限制事件的原因,只是为了考虑“普通”用户。
我目前在 Cassandra 中有当前的数据模型:
user_id, event_type, timestamp, event_blob
在哪里
<user_id, event_type> = partition key, timestamp = clustering key
现在,一旦有新事件发生,我们就会在 Cassandra 中写入一条新记录,然后我们会清理“较重”的分区(即事件计数 > 100)。 这不会实时发生,除非我们不清理繁重的分区,否则我们有时会在读取时遇到很差的延迟。
对于这种情况,您对更好的桌子设计有什么建议吗? 有没有办法告诉 Cassandra 最多只存储 K 个元素进行分区并以 FIFO 方式使旧元素过期?或者我可以选择更好的桌子设计吗?
【问题讨论】:
-
您是否尝试使用 LIMIT 来读取查询?如果您只需要 100 条最新记录,则可以选择
标签: cassandra cql key-value-store