各位,我想用卡桑德拉的一个表来解决以下问题。当用户打开资产时,所述服务跟踪。对于相同资产的后续事件,我们只需重写accessDate。
示例记录:
{ userId:"string",assetId:"string",accessDate: unixTimestamp }
尽管如此,我们需要满足以下访问需求(每个需求都有自己的可读性公告):
这很容易实现,表看起来可以是:
CREATE TABLE user_assets_tracker (
userId uuid,
accessDate timestamp,
assetId uuid,
PRIMARY KEY (userid, accessDate, assetId)
);这允许我们查询所有资产,以及上次访问每个资产的时间。
SELECT *
FROM user_assets_tracker
WHERE userId = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
>花花公子现在,我不太确定的更难的部分,是希望你们能插话:
当然,这里的限制不是我们所需要的。此外,我们可能需要有两个表来实现这一点。
SELECT *
FROM user_assets_tracker
WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
LIMIT 10; ????? 这可能是直截了当的,使用此模式:
CREATE TABLE user_assets_tracker (
userId uuid,
accessDate timestamp,
assetId uuid,
PRIMARY KEY (userid, accessDate, assetId)
);
SELECT *
FROM user_assets_tracker
WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
LIMIT 1;由于accessDate在我们的模式中先于assetId,所以我也不知道如何做到这一点。另一张桌子?
谢谢!!
SASI指数似乎是解决问题的方法
发布于 2017-03-06 19:17:58
尽管您总是选择assetid orderby accessDate desc。
使用accessDate desc顺序定义模式
CREATE TABLE user_assets_tracker (
userid uuid,
accessdate timestamp,
assetid uuid,
PRIMARY KEY (userid, accessdate, assetid)
) WITH CLUSTERING ORDER BY (accessdate DESC, assetid ASC);现在,您不需要每次都指定accessDate desc的订单。默认情况下,它将通过accessDate desc命令您的数据。
30天前第一次拿到时间戳。
让我们现在30天前的时间戳是:2017-02-05 12:00:00+0000
现在您可以查询:
SELECT * FROM user_assets_tracker WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89 AND accessdate >= '2017-02-05 12:00:00+0000'如果您正在使用Cassandra3.0或更高版本,则可以使用物化观点
创建一个物化视图:
CREATE MATERIALIZED VIEW user_assets AS
SELECT *
FROM user_assets_tracker
WHERE userid IS NOT NULL AND assetid IS NOT NULL AND accessdate IS NOT NULL
PRIMARY KEY (userid, assetid, accessdate);现在,如果您想用userid和assetid获取所有数据,下面是查询
SELECT * FROM user_assets WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89 AND assetid = 1d45e6c2-02a1-11e7-aac5-b9ab92bee74c;另一件事是,如果将大量数据插入到单个用户中,您应该添加带有userid的时间桶作为分区key.For更多地检查答案https://stackoverflow.com/a/41857183/2320144
https://stackoverflow.com/questions/42633059
复制相似问题