我在使用Cassandra建模数据时遇到问题。我想将其用作事件存储。我的活动有创建时间戳。这些事件属于一个由ID标识的分区。
现在,我想查看每个ID的最新事件,然后根据时间戳过滤该ID。
所以我有这样的东西:
ID | CREATION_TIMESTAMP | CONTENT
---+---------------------------------+----------------
1 | 2018-11-09 12:15:45.841000+0000 | {SOME_CONTENT}
1 | 2018-11-09 12:15:55.654656+0000 | {SOME_CONTENT}
2 | 2018-11-09 12:15:35.982354+0000 | {SOME_CONTENT}
2 | 2018-11-09 12:35:25.321655+0000 | {SOME_CONTENT}
2 | 2018-11-09 13:15:15.068498+0000 | {SOME_CONTENT}
我尝试按分区ID分组,并查询creation_timestamp
的最大值,但这是不允许的,我应该使用EQ或IN指定分区ID。额外的阅读使我相信这是解决此问题的完全错误的方式,但是我不知道NoSQL是否不是适合该工作的工具,或者我只是从错误的角度解决此问题?
答案 0 :(得分:5)
通过将CREATION_TIMESTAMP作为聚类列并订购DESC,可以轻松实现此目标。然后,您将使用自己的ID并使用限制1(由于该分区键中的数据按DESC顺序排序,这将返回最近的事件)进行查询。
答案 1 :(得分:0)
能否请您分享表定义。
通过查看数据,您可以将ID用作分区键,并将CREATION_TIMESTAMP用作聚簇列。
您可以在keyspace.table中使用select MAX(CREATION_TIMESTAMP),其中ID =“值”;