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_Time Series_Cql - Fatal编程技术网

Cassandra 卡桑德拉时间序列排序

Cassandra 卡桑德拉时间序列排序,cassandra,time-series,cql,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 biddin

我使用以下模式将数据存储在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);
然后我用
从招标中选择*u用户限制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\u id
,因此我猜测(因为您只显示
current\u time
列,而不是
user\u id
)您的前两行共享一个
user\u id
,而第三行的
user\u 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\u id
分区键

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


当前时间的类型为
text
,因此根据日期字符串的字符进行排序

尝试将
current\u time
的类型更改为
timestamp