6

在 cassandra 中创建表时,我们可以提供具有如下排序的聚类键。

Create table user(partitionkey int, id int, name varchar, age int, address text, 
   insrt_ts timestamp,
 Primary key(partitionkey, name, insrt_ts, id)
 with clustering order by (name asc, insrt_ts desc, id asc);

当我们向该表中插入数据时,根据 cassandra 文档记录是根据聚类键进行排序的。

当我使用 CQL1 和 CQL2 检索记录时,我得到了相同的排序顺序。

CQL1:

Select * from user where partitionkey=101;

CQL2:

Select * from user where partitionkey=101 order by name, insrt desc, id;

CQL1 和 CQL2 有什么区别?

4

1 回答 1

6

DataStax 推荐一种面向查询的数据建模方法,其中结果按查询时所需的顺序存储。此顺序由 [compound] 主键的分区键和第一个集群列确定。该条款上的 DataStax 文档ORDER BY解释了这一点:

查询复合主键和排序结果 ORDER BY 子句只能选择单个列。该列必须是复合主键中的第二列。这也适用于主键中包含两个以上列组件的表。排序可以按升序或降序进行,默认升序,并使用 ASC 或 DESC 关键字指定。

在 ORDER BY 子句中,使用实际名称而不是别名来引用列。

例如,设置使用复合主键的播放列表表,插入示例数据,并使用此查询获取有关特定播放列表的信息,按歌曲顺序排序。从 Cassandra 1.2 开始,您不需要在选择表达式中包含 ORDER BY 列。

所以基本上你只能通过要求 ASCending 或 DESCending 顺序来改变它。

您可能还想在DataStax Ac*ademy上查看使用 Apache Cassandra 在线课程的(免费)Java 开发。我相信第 3 节提供了关于该ORDER BY条款的模块。

编辑 2019

对于所有未来的谷歌员工,我在这篇文章发布大约一年后写了一篇关于这个主题的文章。它现在更旧了,但仍然与 Cassandra 的结果集排序相关:https ://www.datastax.com/dev/blog/we-shall-have-order

于 2014-02-03T17:28:39.503 回答