【问题标题】:Cassandra CQL table INSERT and INDEX issueCassandra CQL 表插入和索引问题
【发布时间】:2013-11-15 23:19:10
【问题描述】:

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

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,我不希望任何人再次插入它。

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

【问题讨论】:

  • 如果 (employee_id:value) 是唯一的(或应该是唯一的)那为什么不是你的 PK?这将停止重复插入(尽管它会作为更新,所以你的 last_modified_date 会改变)。

标签: java cassandra cql datastax-java-driver


【解决方案1】:

如果 Cassandra 数据库中已经存在相同的employee_id,我不希望任何人再次插入它

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

但请注意,它的性能不是很好。如果您不经常添加新员工,那么它可能正是您想要的,但如果这是一个完成的查询很多并且很可能发生争用,那么这可能不会奏效那好吧。但是您说您不需要超过 32K 的employee_id 值这一事实表明,添加新员工根本不是一个频繁的查询。

话虽如此,如果唯一担心的是您不会重复使用两次相同的employee_id,C* 中的标准解决方案是只为employee_id 使用一个uuid,这样您就不必担心冲突。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2018-04-18
    • 2014-05-10
    • 1970-01-01
    • 2017-06-05
    • 2012-10-24
    • 2022-08-08
    • 2019-01-27
    • 2019-03-04
    相关资源
    最近更新 更多