CQL中的反向索引

时间:2015-08-06 17:49:11

标签: cassandra cql

目前,我有两个这样的表:

create table id_to_name (
  userid uuid,
  name_id int,
  name text,
  PRIMARY KEY(userid, name_id) WITH CLUSTERING ORDER BY (name_id)   
);

create table name_to_id (
  userid uuid,
  name text,
  name_id int,
  PRIMARY KEY(userid, name) WITH CLUSTERING ORDER BY (name)   
);

(我们有一个特殊的用例,为什么name_id是int而不是uuid)。

我需要通过name_id选择名称,并通过名称选择name_id。有没有办法在一张桌子里有效地做到这一点?

如果没有,并且我们使name_id自动递增,有没有办法可以保证它们可以跨表匹配?触发是我们最好的选择吗?

1 个答案:

答案 0 :(得分:1)

我知道Cassandra没有自动递增。这就是uuid被发明的原因,因此每个节点都可以分配唯一值而不会与其他节点分配的值发生冲突。

另外我认为Cassandra的触发器有点实验性,所以我没有使用它们。

所以我认为你被困在两张桌子上。更新一个时,需要更新另一个(通常使用批处理语句)。

从长远来看,这种用例将由物化视图支持。您将创建一个表作为基表,然后将第二个表定义为视图。然后,当您更新基表时,Cassandra会自动维护视图。这将在3.0中提供,此时已在alpha版本中发布。