在cassandra下存储人员组成员资格

时间:2013-09-21 05:15:59

标签: cassandra cql cql3

假设所有人员记录都由UUID标识,所有组都由UUID标识。当您需要共同查询组中所有人员的列表以及人员所属的所有组的列表时,您将创建什么数据模型。即。

create table membership (
    person_uuid uuid,
    group_uuid uuid,
    joined bigint,
    primary key (person_uuid, group_uuid));

以上内容将优化用于按人查询,以下内容将优化以便按组进行查询。

create table membership (
    group_uuid uuid,
    person_uuid uuid,
    joined bigint,
    primary key (group_uuid, person_uuid));

是否有一种简洁的处理方式,因此您可以通过person_uuidgroup_uuid进行最佳查询,而无需使用“允许过滤”,即:

select group_uuid from membership where person_uuid=?
select person_uuid from membership where group_uuid=? allow filtering

您是否只是继续存储两个方向的数据副本以进行查询,这虽然有原子性问题吗?

1 个答案:

答案 0 :(得分:0)

@Jacob

您可以做的是在主键的第二个群集组件上创建辅助索引,以便能够在其上进行查询。

create table membership (
    person_uuid uuid,
    group_uuid uuid,
    joined bigint,
    primary key (person_uuid, group_uuid));

create index on membership(group_uuid);

当然,您需要将允许过滤添加到查询中,但它会比没有索引快得多。

如果您选择在不使用二级索引的情况下使用2个表索引数据,则可以在插入数据时使用原子批来保证原子性