如果主键包含(timeuuid和timestamp)

时间:2015-06-29 13:59:26

标签: cassandra cqlsh

我正在使用Cassandra 2.1.5。

我正在使用:

创建表格
create table dummy2(  
  id timeuuid,  
  time timestamp,  
  primary key (id, time) 
) with clustering order by (time desc);

我在表中插入了四条记录:

insert into dummy2 (id, time) values (now(), 1000000);  
insert into dummy2 (id, time) values (now(), 2000000);  
insert into dummy2 (id, time) values (now(), 3000000);  
insert into dummy2 (id, time) values (now(), 4000000);  

我得到了结果:

 id                                   | time  
--------------------------------------+--------------------------  
 e1fa7a80-1e64-11e5-8bf5-55cdf06f740f | 1970-01-01 08:33:20+0800  
 e3bbb280-1e64-11e5-8bf5-55cdf06f740f | 1970-01-01 08:50:00+0800  
 e5ceb400-1e64-11e5-8bf5-55cdf06f740f | 1970-01-01 09:06:40+0800  
 e0719090-1e64-11e5-8bf5-55cdf06f740f | 1970-01-01 08:16:40+0800  

看起来像树图顺序,或随机...

如果我将id类型从“timeuuid”更改为“text”,那么订购工作正常:

 id    | time
-------+--------------------------
 hello | 1970-01-01 09:06:40+0800
 hello | 1970-01-01 08:50:00+0800
 hello | 1970-01-01 08:33:20+0800
 hello | 1970-01-01 08:16:40+0800

是设计还是错误?或者我以错误的方式使用它?

1 个答案:

答案 0 :(得分:1)

是的,这就是Cassandra的设计方式。群集顺序仅在分区内。这是因为每个分区键都被散列到一个令牌中,以确定它应该存储在集群中的哪个位置(以提供最佳的数据分配)。然后,每个分区中的行按其聚类顺序写入磁盘。

因此,在您的第一个示例中,每个ID都按time排序。当然,由于每个分区键(id)不同,您无法看到它。但在第二个示例中,您的分区键是相同的,因此您的结果会按时间进行聚类。

  

“看起来像树图顺序,或随机......”

它们按其散列标记值排序,您可以使用token函数来查看:

aploetz@cqlsh:stackoverflow2> SELECT token(id),id,time FROM dummy3;

 token(id)            | id    | time
----------------------+-------+--------------------------
 -3758069500696749310 | hello | 1969-12-31 19:06:40-0600
 -3758069500696749310 | hello | 1969-12-31 18:50:00-0600
 -3758069500696749310 | hello | 1969-12-31 18:33:20-0600
 -3758069500696749310 | hello | 1969-12-31 18:16:40-0600

(4 rows)

或许是一个更好的例子:

aploetz@cqlsh:stackoverflow2> SELECT token(id),id,time FROM dummy2;

 token(id)            | id                                   | time
----------------------+--------------------------------------+--------------------------
 -5795426230130619993 | e1fa7a80-1e64-11e5-8bf5-55cdf06f740f | 1969-12-31 18:33:20-0600
 -2088884548269216731 | e3bbb280-1e64-11e5-8bf5-55cdf06f740f | 1969-12-31 18:50:00-0600
  8496311684589314797 | e5ceb400-1e64-11e5-8bf5-55cdf06f740f | 1969-12-31 19:06:40-0600
  8930307282139899213 | e0719090-1e64-11e5-8bf5-55cdf06f740f | 1969-12-31 18:16:40-0600

(4 rows)

今年早些时候,我为PlanetCassandra写了一篇关于这个经常被误解的主题的文章:We Shall Have Order!给它一个阅读,看看是否有助于指明你正确的方向。