일부 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을 비교 자로 사용하는 예제를 많이 보았지만 키 유효성 검사기에 대한 예는 없습니다.
도움이나 의견을 보내 주시면 대단히 감사하겠습니다.
의견을 주셔서 감사합니다.하지만 내 행이 클러스터의 노드 크기보다 커지면 어떻게해야합니까? 지금까지 이해할 수있는 한 가지 방법은 클러스터 전체에 단일 행을 분할하는 것입니다. –
@ danny.lesnik :이 상황에서 분할이 필요합니다. 큰 줄을 생각하지 않았습니다. 어쨌든, 내 대답의 나머지는 여전히 유효합니다 : ByteOrderedPartitioner를 사용하지 마십시오. 단일 서버에 전체 범위를 배치 할 것이므로 적절한 열 범위를 가진 MultigetSliceQuery가 올바르게 작동해야합니다. – Wildfire