0

我是 cassandra 的新手,我对“排序”有疑问。

我的表很简单,就像这样:

CREATE TABLE test.user_daily_report (
    stringdate bigint,
    m_date date,
    users int,
    PRIMARY KEY (stringdate, m_date)
) WITH CLUSTERING ORDER BY (m_date DESC)
   AND read_repair_chance = 0.0
   AND dclocal_read_repair_chance = 0.1
   AND gc_grace_seconds = 864000
   AND bloom_filter_fp_chance = 0.01
   AND caching = { 'keys' : 'ALL', 'rows_per_partition' : 'NONE' }
   AND comment = ''
   AND compaction = { 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold' : 32, 'min_threshold' : 4 }
   AND compression = { 'chunk_length_in_kb' : 64, 'class' : 'org.apache.cassandra.io.compress.LZ4Compressor' }
   AND default_time_to_live = 0
   AND speculative_retry = '99PERCENTILE'
   AND min_index_interval = 128
   AND max_index_interval = 2048
   AND crc_check_chance = 1.0;

但结果没有任何排序效果:

在此处输入图像描述

当我尝试按 m_date 订购时,我遇到了这个问题:

在此处输入图像描述

请帮助我,这让我很困惑。

谢谢

4

1 回答 1

1

与传统的关系数据库相比,CassandraORDER BY仅在分区内工作 - 当您WHERE在分区键上指定条件时(stringdate在您的示例中),即select * from table where stringdate = 'something' order by m_date desc- 在这种情况下,与特定相关的数据stringdate将被排序,因为它们位于同一分区中。

在您的情况下,您收到来自 Cassandra 的所有结果,因为您添加了“允许过滤” - 在这种情况下,Cassandra 使用您的条件执行整个集群的扫描,获取数据并将其返回给您 - 但它没有执行任何排序。

我建议观看 DataStax Academy 的“DS220:数据建模”课程——它们提供了很多有用的信息......

PS你能描述一下你想解决什么任务吗?我相信您需要更改数据模型。

于 2017-12-08T09:29:49.363 回答