【发布时间】: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 总是唯一的。所以我们的查询模式是这样的:
- 给我任何employee_id的所有东西?
- 请告诉我最近 5 分钟发生的变化?
- 给我任何员工姓名的一切吗?
我会将以下数据插入到我的上表中 -
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