【问题标题】:Cassandra Time Series sortCassandra 时间序列排序
【发布时间】:2016-07-08 16:00:16
【问题描述】:

我使用以下架构将数据存储在 Cassandra NoSQL 数据库中:

CREATE TABLE bidding3(
    item_id bigint,
    user_id bigint,
    bid_price bigint,
    current_time text,
    PRIMARY KEY (item_id,current_time)
) WITH CLUSTERING ORDER BY (current_time,DESC);


CREATE TABLE bidding_user(
    item_id bigint,
    user_id bigint,
    bid_price bigint,
    current_time text,
    PRIMARY KEY (user_id,current_time)
) WITH CLUSTERING ORDER BY (current_time,DESC);

然后我使用 SELECT * FROM bidding_user LIMIT 5;。 我希望数据是按时间序列排列的,第一天也是如此,但今天情况发生了变化。

Wed Jul 06 20:09:04 UTC 2016
Wed Jul 06 19:10:04 UTC 2016
Thu Jul 07 19:09:04 UTC 2016.

我认为数据库忽略了日期而只关心时间。

知道如何解决这个问题吗?

【问题讨论】:

    标签: cassandra time-series cql


    【解决方案1】:
    SELECT * FROM bidding_user LIMIT 5;
    

    这里的问题是您没有指定WHERE 子句。 Cassandra 仅在分区键中维护排序顺序。您的分区键是user_id,所以我的猜测(因为您只向我们展示current_time 列,而不是user_id)是您的前两行共享user_id,而user_id 用于第三行不同。

    考虑下表:

    CREATE TABLE stackoverflow.timestamptest (
        userid text,
        activetime timestamp,
        value text,
        PRIMARY KEY (userid, activetime)
    ) WITH CLUSTERING ORDER BY (activetime ASC)
    

    如果我在没有 WHERE 子句的情况下进行查询,我会得到:

    aploetz@cqlsh:stackoverflow> SELECT userid,activetime FROM timestamptest ;
    
     userid | activetime
    --------+--------------------------
          a | 2015-09-25 11:33:33+0000
          a | 2015-10-22 14:26:00+0000
          c | 2015-12-28 19:12:00+0000
          d | 2016-01-22 14:57:54+0000
          d | 2016-01-22 14:57:54+0000
          d | 2016-07-07 19:44:04+0000
          b | 2015-10-22 14:26:00+0000
          b | 2016-07-07 19:44:10+0000
    
    (8 rows)
    

    如您所见,我的集群键 (activetime) 的顺序实际上只在每个分区键 (userid) 中才有意义。

    换句话说,如果您希望对结果集进行排序,则需要在查询的WHERE 子句中指定user_id 分区键。

    不是为了自我推销什么的,但我去年初写了一篇关于这个主题的文章,这可能会帮助你更好地理解这一点:

    PlanetCassandra: We Shall Have Order!

    【讨论】:

      【解决方案2】:

      current_time 的类型为 text,因此排序是根据日期字符串的字符进行的。

      尝试将current_time 的类型更改为timestamp。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 2017-06-23
        • 2017-04-13
        • 2011-01-13
        • 2016-04-10
        • 1970-01-01
        相关资源
        最近更新 更多