当前位置: 首页 > 知识库问答 >
问题:

如果主键包含(timeuuid和timestamp)

伯丁雷
2023-03-14

我用的是卡桑德拉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    | 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

是设计出来的还是一个bug?还是我用错了方法?

共有1个答案

穆单鹗
2023-03-14

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

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

“哪个看起来像树图顺序,还是随机的……”

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写了一篇关于这个经常被误解的话题的文章:我们将有秩序!读一读,看看这是否能帮助你找到正确的方向。

 类似资料:
  • 目前 我在DynamoDB中有一个表,其中有一个属性-主键-包含唯一的值。 问题 我希望对#B#C#(1)精确匹配和(2)包含匹配进行2次搜索,因此只需要结果: 是否可以针对主键进行这2次搜索 如果是这样,运行哪种查询最有效?e、 g.查询或扫描 注: 对于(2),我使用以下代码,但它返回DB中的所有项:

  • 问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f

  • 问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f

  • 我有一个类似的问题如下,但解决方案没有解决我的问题。 hibernate复合主键包含复合外键,如何映射此 我试图连接2个表,每个表都有一个复合主键和部分外键引用。 你能帮忙吗?

  • 问题内容: 我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。 我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。 现在的问题是关于复合PK映射。例如 表A具有复合PK。 表B也有一个复合PK,此复合PK的一部分是A的PK,此处也用作FK。 我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hi

  • 可能重复: javascript:string包含 我有一个postcode变量,希望在更改/输入邮政编码时使用JS将一个位置添加到不同的变量中。例如,如果输入了ST6,我希望输入Stoke North。 我需要做一个if语句来运行。 等等。 我该怎么做呢?它不是检查'code'是否等于一个值,而是检查它是否包含一个值,我认为这是我的问题。