0

假设所有人员记录均由 UUID 标识,所有组均由 UUID 标识。当你需要共同查询一个组中所有人的列表,以及一个人所属的所有组的列表时,你会创建什么数据模型。IE

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

您是否只是继续存储两个数据副本以进行双向查询,尽管这存在原子性问题,对吗?

4

1 回答 1

0

@雅各布

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

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

create index on membership(group_uuid);

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

如果您选择使用2表索引数据而不使用二级索引,您可以在插入数据时使用原子批处理以保证原子性

于 2013-09-21T09:18:43.523 回答