2013-06-26 2 views
0

우리의 열 이름은 우리가 원하는 순서로 반환되도록 의도적으로 선택되었습니다 (키는 기본적으로 내부 시퀀스 번호 임). 우리의 rowkeys도 마찬가지로 주문됩니다. 기본적으로 하루에 하나의 행키가 있고, 그 행의 모든 ​​열이 그 행에 추가됩니다.모든 행에서 가장 최근에 추가 된 열을 가져 오시겠습니까?

그렇다면 가장 최근 행의 가장 최근 열을 반환하는 쿼리를 Hector에서 어떻게 만듭니 까? 아니면 가장 오래된? 요컨대, 가장 일반적인 두 가지 쿼리는 "가장 최근의 항목 가져 오기"및 "가장 오래된 항목 가져 오기"입니다.

정확한 쿼리를 처리하기에는 Cassandra 또는 Hector에 익숙하지 않습니다. 이런 식으로 보일까?

QueryResult<OrderedRows<String, String, Long>> result = 
    rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setRowCount(1).setRange("","",true,1).execute(); 

은 열 이름이 동적으로 값을 생성하고 내가 마지막 또는 첫 번째 값은 아무 생각이 없기 때문에, 나는 키와 열 범위에 대한 오픈 엔드 가치를 피할 수있는 방법이 표시되지 않습니다. 바라건대 Hector/Cassandra는이 작업을 신속하게 수행 할 수있을만큼 똑똑하거나 내가해야 할 최적화가 있습니까?

답변

2

열이 역순으로 정렬되도록하려면 한계 값 1 인 행에 대해 슬라이스 쿼리를 수행하고 가장 최근 값만 가져올 수 있습니다. 역순으로 주문하지 않으면 전체 행을 읽을 필요가 있습니다.

가장 최근 행을 얻는 방법에 대해서는 하나의 쿼리에서 찾을 방법이 없습니다. 한 가지 방법은 모든 행의 색인을 유지하는 것입니다 (다시 한 번 역순으로 동일한 트릭을 사용하여 가장 최근의 색인을 선택할 수 있음).이 색인을 먼저 누른 다음 행을 누르십시오. 또 다른 방법은 값에 대한 대략적인 아이디어가 있고 값의 순서를 예측할 수 있습니다 (가능한 한 소리가 들리고 하루에 한 행이 있어야하며 나중에 행이 없어야 함). 그런 다음 가능한 가장 최근 값을 선택하고 그 값을로드하려고 시도합니다. 다시 값을 가져 오지 않으면 다음 가장 최근 값을로드하는 등의 작업을 수행합니다. 첫 번째 시도에서 히트를 얻지 못할 가능성이있는 경우 (예를 들어 매일 행이 없으면 대부분의 경우) 한 번에 5 개 또는 10 개의 값을 쿼리 할 수 ​​있습니다. 가장 최근에 당신이 돌아 왔을 때 (그리고 당신이 아무것도 얻지 못하면 반복).

+0

감사합니다. 어제 보았던 bazillion 웹 페이지를 확인하는 것 같습니다. :). 안타깝게도 Cassandra는 현재 구성된 구성 요소를 기반으로 특정 쿼리 집합에 적합하지 않습니다. 돌아가서 우리가 어떻게 모델링하고 있는지 생각해 봐야 겠어. –