Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索按日期排序的记录的Cassandra模式_Cassandra_Cql_Cql3 - Fatal编程技术网

检索按日期排序的记录的Cassandra模式

检索按日期排序的记录的Cassandra模式,cassandra,cql,cql3,Cassandra,Cql,Cql3,各位, 我想用Cassandra中的一个表来解决以下问题。所述服务跟踪用户何时打开资产。对于同一资产的后续事件,我们只需覆盖accessDate 示例记录: {userId:“string”,assetId:“string”,accessDate:unixTimestamp} 如上所述,我们需要满足以下访问要求(每个要求都有自己的可读性公告点): 能够返回用户已打开的所有资产,以及何时打开 这很容易实现,表可以如下所示: CREATE TABLE user_assets_tracker (

各位, 我想用Cassandra中的一个表来解决以下问题。所述服务跟踪用户何时打开资产。对于同一资产的后续事件,我们只需覆盖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;
>
丹迪。现在更难的是,我不确定,希望你们能插话:

  • 显示用户在过去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的完整记录
因为在我们的模式中accessDate在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天前的时间戳。
让我们看看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的完整记录
如果您使用的是Cassandra 3.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作为分区键的时间段。有关更多信息,请查看答案

非常感谢!快速提问,我看到在第一个示例中有(userid,accessdate,assetid),但在第二个示例中有(userid,assetid,accessdate);那么,单个查询将如何工作?