我应该如何设计模式以获取Cassandra中每个集群密钥的最后2条记录?

我的表中的每一行都有4个值product_iduser_idupdated_atrating。我应该如何设计模式以获取Cassandra中每个集群密钥的最后2条记录?

我想创建一个表来找出有多少用户在一定时期内改变rating

目前我的模式是这样的:

CREATE TABLE IF NOT EXISTS ratings_by_product (

product_id int,

updated_at timestamp,

user_id int,

rating int,

PRIMARY KEY ((product_id ), updated_at , user_id))

WITH CLUSTERING ORDER BY (updated_at DESC, user_id ASC);

,但我不能想出的办法只能获得在给定的时间窗口中的最后2行,每行用户。

上查询或更改架构任何意见,将不胜感激。

回答:

卡桑德拉需要一个基于查询的方式来表设计。这意味着通常一个表格将提供一个查询。所以,为您服务是在谈论(每用户最后两个更新行)查询,你应该建立专门服务于它的表:

CREATE TABLE ratings_by_user_by_time (

product_id int,

updated_at timestamp,

user_id int,

rating int,

PRIMARY KEY ((user_id ), updated_at, product_id))

WITH CLUSTERING ORDER BY (updated_at DESC, product_id ASC);

然后,你将能够获得最后两个更新的等级为用户通过执行以下操作:

SELECT * FROM ratings_by_user_by_time 

WHERE user_id = 'Bob' LIMIT 2;

请注意,你需要保持两个等级表中同步自己,并使用批处理语句来实现这一目标的好方法。

以上是 我应该如何设计模式以获取Cassandra中每个集群密钥的最后2条记录? 的全部内容, 来源链接: utcz.com/qa/259177.html

回到顶部