gpt4 book ai didi

cassandra - 可以在 UUID 列上创建索引吗?

转载 作者:行者123 更新时间:2023-12-02 22:33:56 25 4
gpt4 key购买 nike

是否可以在 Cassandra 中的 UUID/TIMEUUID 列上创建索引?我正在测试一个模型设计,该设计在 UUID 列上有一个索引,但对该列的查询始终返回找到的 0 行。

我有一个这样的表:

create table some_data (site_id int, user_id int, run_id uuid, value int, primary key((site_id, user_id), run_id));

我使用此命令创建索引:

create index idx on some_data (run_id) ;

当我创建此索引时,CQL 没有抛出任何错误。

表中我有一小部分测试数据:

 site_id | user_id | run_id                               | value
---------+---------+--------------------------------------+-----------------
1 | 1 | 9e118af0-ac92-11e4-81ae-8d1bc921f26d | 3

但是,当我运行查询时:

select * from some_data where run_id = 9e118af0-ac92-11e4-81ae-8d1bc921f26d

CQLSH 仅返回:(0 行)

如果我使用 int 作为 run_id,那么索引的行为将按预期进行。

最佳答案

是的,您可以在 UUID 上创建二级索引。真正的问题是“你应该吗?”

无论如何,我按照你的步骤操作,并且成功了。

Connected to Test Cluster at 192.168.23.129:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
aploetz@cqlsh> use stackoverflow ;
aploetz@cqlsh:stackoverflow> create table some_data (site_id int, user_id int, run_id uuid, value int, primary key((site_id, user_id), run_id));
aploetz@cqlsh:stackoverflow> create index idx on some_data (run_id) ;
aploetz@cqlsh:stackoverflow> INSERT INTO some_data (site_id, user_id, run_id, value) VALUES (1,1,9e118af0-ac92-11e4-81ae-8d1bc921f26d,3);
aploetz@cqlsh:stackoverflow> select * from usr_rec3 where run_id = 9e118af0-ac92-11e4-81ae-8d1bc921f26d;
code=2200 [Invalid query] message="unconfigured columnfamily usr_rec3"
aploetz@cqlsh:stackoverflow> select * from some_data where run_id = 9e118af0-ac92-11e4-81ae-8d1bc921f26d;

site_id | user_id | run_id | value
---------+---------+--------------------------------------+-------
1 | 1 | 9e118af0-ac92-11e4-81ae-8d1bc921f26d | 3

(1 rows)

但请注意,当我运行此命令时,它失败了:

select * from usr_rec3 where run_id = 9e118af0-ac92-11e4-81ae-8d1bc921f26d

您确定您不是要从 some_data 中进行选择吗?

此外,在高基数列(如 UUID)上创建二级索引通常不是一个好主意。如果您需要通过 run_id 进行查询,那么您应该重新访问您的数据模型并提出一个适当的查询表来满足该需求。

澄清:

  • 一般而言,使用二级索引并不被认为是良好做法。新书中Cassandra High Availability ,由于性能不佳,Robbie Strickland 将其使用视为反模式。
  • 仅仅因为列属于 UUID 数据类型并不一定意味着它具有高基数。这对你来说更多是一个数据模型问题。但了解 UUID 的性质及其独特的潜在目的,就会引发危险信号。
  • 将这两点放在一起,在 UUID 上创建索引听起来没有什么吸引我的地方。如果是我的集群,并且(更重要的是)我以后必须支持它,我就不会这样做。

关于cassandra - 可以在 UUID 列上创建索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com