我应该如何设计模式以获取Cassandra中每个集群密钥的最后2条记录?
我的表中的每一行都有4个值product_id
,user_id
,updated_at
,rating
。我应该如何设计模式以获取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