Cassandra - CQL - 在分区键

时间:2016-10-31 14:58:39

标签: cassandra cql

我在Cassandra中创建一个表来监视来自应用程序的插入。 我的分区键是一个由年+月+日组成的int,我的聚类键是一个时间戳,之后是我的用户名和其他一些字段。

我想显示最后5个插入,但似乎分区键位于“desc命令”之前。

如何获得正确的结果? Normaly聚类键导致顺序,所以为什么我得到这个结果? (提前感谢)

信息:

Query : select tsp_insert, txt_name from ks_myKeyspace.myTable limit 5;

结果:

 idt_day  | tsp_insert               | txt_name  
----------+--------------------------+----------
 20161028 | 2016-10-28 15:21:09+0000 | Jean
 20161028 | 2016-10-28 15:21:01+0000 | Michel
 20161028 | 2016-10-28 15:20:44+0000 | Quentin
 20161031 | 2016-10-31 09:24:32+0000 | Jacquie
 20161031 | 2016-10-31 09:23:32+0000 | Gabriel

通缉:

 idt_day  | tsp_insert               | txt_name  
----------+--------------------------+----------
 20161031 | 2016-10-31 09:24:32+0000 | Jacquie
 20161031 | 2016-10-31 09:23:32+0000 | Gabriel
 20161028 | 2016-10-28 15:21:09+0000 | Jean
 20161028 | 2016-10-28 15:21:01+0000 | Michel
 20161028 | 2016-10-28 15:20:44+0000 | Quentin

我的表:

CREATE TABLE ks_myKeyspace.myTable(
idt_day int,
tsp_insert timestamp,
txt_name  text, ...
PRIMARY KEY (idt_day, tsp_insert)) WITH CLUSTERING ORDER BY (tsp_insert DESC);

2 个答案:

答案 0 :(得分:4)

最终,您正在查看当前订单,因为您没有使用SKShapeNode子句。如果在分区键上使用WHERE函数,则可以看到正在发生的事情:

token

Cassandra CQL中的结果将始终按分区键的哈希标记值的顺序返回(您可以使用aploetz@cqlsh:stackoverflow> SELECT idt_day,tsp_insert,token(idt_day),txt_name FROM mytable ; idt_day | tsp_insert | system.token(idt_day) | txt_name ----------+---------------------------------+-----------------------+---------- 20161028 | 2016-10-28 15:21:09.000000+0000 | 810871225231161248 | Jean 20161028 | 2016-10-28 15:21:01.000000+0000 | 810871225231161248 | Michel 20161028 | 2016-10-28 15:20:44.000000+0000 | 810871225231161248 | Quentin 20161031 | 2016-10-31 09:24:32.000000+0000 | 5928478420752051351 | Jacquie 20161031 | 2016-10-31 09:23:32.000000+0000 | 5928478420752051351 | Gabriel (5 rows) 查看)。在分区键中,您的token将被强制执行。

这是理解的关键...... Cassandra中的结果集排序只能在分区键中强制执行。您无法控制分区键重新进入的顺序。

简而言之,在CLUSTERING ORDER上使用WHERE条款,您就会看到预期的顺序。

答案 1 :(得分:0)

在我看来,你弄错了。分区键不用于排序数据,它们仅用于了解数据在集群中的位置,特别是节点。而且,订单在分区内真正重要......

您的查询结果确实无法预测。根据哪个节点更快回答(假设群集而不是单个节点),每次都可以获得不同的结果。您应该尽量避免在没有分区限制的情况下进行选择,否则它们不会缩放。

然而,您可以更改查询并每天执行一次选择,然后以有序的方式查询订购数据(您的群集密钥)(您手动选择查询中的天数顺序)。作为旁注,它会更快,因为您可以并行查询多个分区。