2013-09-21 2 views
0

모든 사람 레코드가 UUID로 식별되고 모든 그룹이 UUID로 식별된다고 가정합니다. 그룹의 모든 사람 목록과 사람이 속한 모든 그룹의 목록을 일반적으로 쿼리해야 할 때 만드는 데이터 모델입니다. 즉cassandra 아래 사람 그룹 구성원 저장

위의 내용은 사람이 쿼리하는 데 최적화되며, 아래의 내용은 그룹별로 쿼리하는 데 최적화됩니다.

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

방금 ​​가서 두를 저장 마십시오 즉

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

사용 "필터링을 허용"하지 않고도 최적의 group_uuid에 의해 person_uuid으로 조회 할 수 있도록 처리하는 깔끔한 방법이 있나요, 양방향으로 쿼리를위한 데이터 사본, 이것은 비록 원 인성 문제가 있습니까?

답변

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 개 테이블 인덱스 데이터를 사용할 경우, 당신은 사용할 수 원자 배치 자성을

을 보장하기 위해 데이터를 삽입
관련 문제