检索按日期排序的记录的Cassandra模式
各位, 我想用Cassandra中的一个表来解决以下问题。所述服务跟踪用户何时打开资产。对于同一资产的后续事件,我们只需覆盖accessDate 示例记录: {userId:“string”,assetId:“string”,accessDate:unixTimestamp} 如上所述,我们需要满足以下访问要求(每个要求都有自己的可读性公告点):检索按日期排序的记录的Cassandra模式,cassandra,cql,cql3,Cassandra,Cql,Cql3,各位, 我想用Cassandra中的一个表来解决以下问题。所述服务跟踪用户何时打开资产。对于同一资产的后续事件,我们只需覆盖accessDate 示例记录: {userId:“string”,assetId:“string”,accessDate:unixTimestamp} 如上所述,我们需要满足以下访问要求(每个要求都有自己的可读性公告点): 能够返回用户已打开的所有资产,以及何时打开 这很容易实现,表可以如下所示: CREATE TABLE user_assets_tracker (
- 能够返回用户已打开的所有资产,以及何时打开
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;
>
丹迪。现在更难的是,我不确定,希望你们能插话:
- 显示用户在过去30天内添加的所有资产
SELECT *
FROM user_assets_tracker
WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
LIMIT 10; ?????
- 显示用户最后访问的项目。我认为这个更容易,极限1解决了这个问题
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;
- 检索特定userId+assetId的完整记录
PS尽管您总是选择assetid orderby accessDate desc.
使用order by 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对数据进行排序
CREATE TABLE user_assets_tracker (
userid uuid,
accessdate timestamp,
assetid uuid,
PRIMARY KEY (userid, accessdate, assetid)
) WITH CLUSTERING ORDER BY (accessdate DESC, assetid ASC);
- 显示用户在过去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'
- 检索特定userId+assetId的完整记录
创建物化视图:
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作为分区键的时间段。有关更多信息,请查看答案非常感谢!快速提问,我看到在第一个示例中有(userid,accessdate,assetid),但在第二个示例中有(userid,assetid,accessdate);那么,单个查询将如何工作?