gpt4 book ai didi

java - Cassandra CQL表INSERT和INDEX问题

转载 作者:行者123 更新时间:2023-12-01 13:52:41 25 4
gpt4 key购买 nike

我在我们的用例中使用下表 -

create table test_new (
employee_id text,
employee_name text,
value text,
last_modified_date timeuuid,
primary key (employee_id, last_modified_date)
);

create index employee_name_idx on test_new (employee_name);

在我的上表中,employee_id 始终是唯一的,从 1 到 32767。所以我们的查询模式如下:

  1. 向我提供任何employee_id 的所有信息吗?
  2. 请提供过去 5 分钟内发生的变化的所有信息?
  3. 向我提供有关员工姓名的所有信息吗?

我将把以下数据插入到上面的表格中 -

insert into test_new (employee_id, employee_name, value, last_modified_date) 
values ('1', 'e27', 'some_value', now());
insert into test_new (employee_id, employee_name, value, last_modified_date)
values ('2', 'e27', 'some_new_value', now());
insert into test_new (employee_id, employee_name, value, last_modified_date)
values ('3', 'e28', 'some_new_again_value', now());

我能够执行上述所有查询模式,但仍然存在一个问题。


我的问题是关于避免下面的查询出现这种特定情况。如果不知何故错误地尝试执行下面的查询怎么办?如果这样做,它会创建另一行,其中employee_id为1并具有其他字段?如果 Cassandra 数据库中已存在相同的employee_id,我不希望任何人再次插入该相同的employee_id。

insert into test_new (employee_id, employee_name, value, last_modified_date) 
values ('1', 'e29', 'some_new_value', now());

有什么想法吗?我知道这是一个有争议的情况,因为关于使用 RDBMS 与 Cassandra 的争论

并且在employee_name上创建索引会导致任何问题吗?在我的示例中,相同的employee_name可以有多个employee_id但具有不同的值。请记住,employee_id 不会大于 32767,因此这意味着上表中的最大行数将为 32767

我正在运行 Cassandra 1.2.9

最佳答案

I don't want anyone to insert the same employee_id again if it is already there in the Cassandra database

保证 Cassandra 提供的唯一方法(“仅当不存在具有相同 PK 的行时才插入”)是 Cassandra 2.0 中引入的条件插入/更新:http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0 .

但请注意,其性能不是很好。如果您不经常添加新员工,那么这可能正是您想要的,但如果这是一个执行次数很多的查询,并且可能存在争用,那么这可能不会全部起作用那好吧。但您所说的不需要超过 32K 的 employee_id 值这一事实表明,添加新员工实际上根本不是一个频繁的查询。

话虽这么说,如果唯一担心的是您不重复使用相同的employee_id,C* 中的标准解决方案是仅使用 uuid 作为employee_id,这样您就不必担心冲突。

关于java - Cassandra CQL表INSERT和INDEX问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850863/

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