• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

cassandra 来源:Harrison 9次浏览

我的表中的每一行都有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; 

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


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)