2012-10-06 6 views
3

astyanax 클라이언트와 RowSliceQuery를 사용하여 열 패밀리의 모든 행을 매김하는 쿼리를 작성하려고합니다.Astyanax 키 범위 쿼리

keyspace.prepareQuery(COLUMN_FAMILY).getKeyRange(null, null, null, null, 100); 

1 차 호출에 null 시작 및 종료 키가있는 경우 hector를 사용하여 성공적으로 완료했습니다. 첫 번째 페이지를 검색 한 후 결과에서 마지막 키를 사용하여 두 번째 페이지 등을 쿼리합니다.이 페이지는 hector를 사용하는 첫 번째 페이지의 코드입니다.

HFactory.createRangeSlicesQuery(keyspace, 
LongSerializer.get(), new CompositeSerializer(), 
BytesArraySerializer.get()) 
.setColumnFamily(COLUMN_FAMILY) 
.setRange(null, null, false, 100).setRowCount(100); 

이제 astyanax와 함께이 작업을 수행하려고 할 때 null 및 null이 아닌 키와 토큰에 대한 오류가 발생합니다. 이 쿼리에서 어떤 토큰이 적합한 지 알 수 없습니다. 또한 allRows()를 사용할 수 있지만 더 유연하게 키 범위 쿼리를 사용하여이 작업을 수행하려고합니다.

누구나 astyanax를 사용하여 키 범위 쿼리의 예가 있습니까? "시작하기"문서 나 인터넷의 다른 곳에서 예제를 찾을 수 없습니다.

감사합니다. 안동

답변

-1

이 샘플 코드를 확인하십시오. 이 코드가 페이징을하는 데 도움이되기를 바랍니다. 그러나 ByteOrderedPartitioner를 사용하는 경우이 경우에만 작동

keyspace.prepareQuery(CF_STANDARD1) 
    .getRowRange(startKey, endKey, startToken, endToken, count) 

참고 :

IndexQuery<String, String> query = keyspace 
    .prepareQuery(CF_STANDARD1).searchWithIndex() 
    .setRowLimit(10).autoPaginateRows(true).addExpression() 
    .whereColumn("Index2").equals().value(42); 

최저

,

+0

아니요, 그는 행 키를 페이지 매기기로 지정하고 색인을 검색하지 않습니다. –

0

은 당신이 언급하는 것은 getRowRange 방법이다. 기본적으로 Cassandra는 Murmur3Partitioner를 사용하기 때문에 일반적으로 작동하지 않습니다. 색인 대신이 작업을 수행하는 것이 좋습니다. Astyanax는 레시피도 제공합니다.이 레서피는 키를 열로 저장하는 두 번째 열 패밀리를 활용하여 원본 데이터에서 효율적인 범위 검색을 가능하게합니다.