Cassandra 时间序列排序

标签 cassandra time-series cql

我使用以下架构将数据存储在 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);

然后我用 从 bid_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.

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

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

最佳答案

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 分区键。

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

PlanetCassandra: We Shall Have Order!

关于Cassandra 时间序列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253507/

相关文章:

node.js - Nodejs cassandra 数据类型问题

Cassandra 3 Java Driver 构建动态查询

azure - 如何修复在Azure服务中运行Cassandra的 'not support yet'错误?

python - 如何使用基于numpy中日期的窗口获取时间序列的回顾移动平均值?

r - 如何通过使用 R 中时间序列中的第一个和最后一个时间戳来定义遭遇时间段

python - CQL过滤方法-python

node.js - 如何通过node js运行cassandra的复杂sql

node.js - Nodejs Cassandra 客户端 [node-cassandra-client]

cassandra - 为什么创建表需要这么长时间?

python - 按日期索引的 Pandas 数据框