首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检索日期顺序记录的Cassandra模式

用于检索日期顺序记录的Cassandra模式
EN

Stack Overflow用户
提问于 2017-03-06 18:34:55
回答 1查看 152关注 0票数 2

各位,我想用卡桑德拉的一个表来解决以下问题。当用户打开资产时,所述服务跟踪。对于相同资产的后续事件,我们只需重写accessDate。

示例记录:

{ userId:"string",assetId:"string",accessDate: unixTimestamp }

尽管如此,我们需要满足以下访问需求(每个需求都有自己的可读性公告):

  • 能够返回用户打开的所有资产,以及何时打开。

这很容易实现,表看起来可以是:

代码语言:javascript
复制
CREATE TABLE user_assets_tracker (
   userId uuid,
   accessDate timestamp,
   assetId uuid,
   PRIMARY KEY (userid, accessDate, assetId)
);

这允许我们查询所有资产,以及上次访问每个资产的时间。

代码语言:javascript
复制
SELECT *
FROM user_assets_tracker
WHERE userId = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
>

花花公子现在,我不太确定的更难的部分,是希望你们能插话:

  • 告诉我过去30天所有用户添加的资产。

当然,这里的限制不是我们所需要的。此外,我们可能需要有两个表来实现这一点。

代码语言:javascript
复制
SELECT *
FROM user_assets_tracker
WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89
ORDER BY accessDate DESC;
LIMIT 10; ?????  
  • 向我展示用户上一次访问的项目。我认为这个比较简单,极限1解决了这个问题。

这可能是直截了当的,使用此模式:

代码语言:javascript
复制
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,所以我也不知道如何做到这一点。另一张桌子?

谢谢!!

SASI指数似乎是解决问题的方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 19:17:58

尽管您总是选择assetid orderby accessDate desc。

使用accessDate desc顺序定义模式

代码语言:javascript
复制
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天前第一次拿到时间戳。

让我们现在30天前的时间戳是:2017-02-05 12:00:00+0000

现在您可以查询:

代码语言:javascript
复制
SELECT * FROM user_assets_tracker WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89 AND accessdate >= '2017-02-05 12:00:00+0000'
  • 检索特定userId + assetId的完整记录

如果您正在使用Cassandra3.0或更高版本,则可以使用物化观点

创建一个物化视图:

代码语言:javascript
复制
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获取所有数据,下面是查询

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42633059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档