2012-12-08 1 views
1

일부 POC에서 작업 중입니다.Cassandra CompositeType을 행 키로 사용 Validator

서버 이벤트를 저장하는 열 패밀리가 있습니다. 각각의 서버 이름

CREATE COLUMN FAMILY logs with comparator='ReversedType(TimeUUIDType)' and key_validation_class='CompositeType(UTF8Type,IntegerType)' and default_validation_class=UTF8Type; 

우리는 N 행을 가지고 우리는 아주 간단한 라운드 로빈 알고리즘을 사용하여 각 행에 데이터를 작성 : 특대 우리는 다른 행 N에 각 행을 분할 키 행에서의 CompositeType을 사용하는 행 얻을 방지 .

나는 어떤 행에 데이터를 쓸 수있는 아무런 문제가 없다 : 지금까지

Mutator<Composite> mutator = HFactory.createMutator(keySpace, CompositeSerializer.get()); 
    HColumn<UUID,String> col = 
    HFactory.createColumn(TimeUUIDUtils.getUniqueTimeUUIDinMillis(), log); 
    Composite rowName = new Composite(); 
    rowName.addComponent(serverName, StringSerializer.get()); 
    rowName.addComponent(this.roundRobinDestributor.getRow(), IntegerSerializer.get()); 
    mutator.insert(rowName, columnFamilyName, col); 
} 

너무 좋아,하지만 지금은 두 quetions 있습니다

1)으로 인해 내가 얻으려면 있다는 사실을 일부 serverName에 대한 모든 로그는 행 키를 스캔 할 때 ByteOrderedPartitioner을 사용해야합니까?

2) 어떤 몸이라도 나를 도울 수 있거나, server1 ({server1 : 0}, {server1 : 1} {server1 : 2} 등)에 대한 모든 행을 가져 오는 Hector 쿼리를 만드는 방법에 대한 도움을받을 수 있습니까? ..)? CompositeType을 비교 자로 사용하는 예제를 많이 보았지만 키 유효성 검사기에 대한 예는 없습니다.

도움이나 의견을 보내 주시면 대단히 감사하겠습니다.

답변

1

우선, 행 오버 사이즈는 카산드라의 문제가 아니어야합니다. 그럼에도 불구하고, 클러스터를 통한 데이터 분배가이 상황에서도 더 많이 이루어 지므로 행을 쏟을 가치가 있습니다. 이 핫스팟으로 이어질 것입니다 클러스터에서 행의 균일 한 분포를 달성하기 어려울 것이기 때문

  1. ByteOrderedPartitioner

    , 여기에 좋은 옵션처럼 보이지 않는다.

  2. RandomPartitioner을 사용할 때 키 범위를 쿼리하는 방법은 없습니다. 그러나 최대 N 값이 합리적으로 작은 경우 (최대 256) MultigetSliceQuery은 전체 행 세트를 쿼리하는 데 사용될 수 있습니다.

+0

의견을 주셔서 감사합니다.하지만 내 행이 클러스터의 노드 크기보다 커지면 어떻게해야합니까? 지금까지 이해할 수있는 한 가지 방법은 클러스터 전체에 단일 행을 분할하는 것입니다. –

+0

@ danny.lesnik :이 상황에서 분할이 필요합니다. 큰 줄을 생각하지 않았습니다. 어쨌든, 내 대답의 나머지는 여전히 유효합니다 : ByteOrderedPartitioner를 사용하지 마십시오. 단일 서버에 전체 범위를 배치 할 것이므로 적절한 열 범위를 가진 MultigetSliceQuery가 올바르게 작동해야합니다. – Wildfire