2011-08-12 2 views
3

내 키는 세 가지 구성 요소가 NUM, 유형 이름Partial Key 스캐닝으로 효율적인 페칭을 위해 HBase에 데이터를 저장하는 방법은 무엇입니까?

'형태'는 두 종류의 B 및 NUM 예컨대 이상의 값을 가질 수있다 동안 0,1,2 .., 30

num과 관련하여 데이터를 가져와야합니다. 즉, 지정된 num 및 유형의 키가있는 모든 행을 가져와야합니다.

I 중 하나를 수행 할 수 있습니다 형태로 데이터를 저장 : 1. num|type|name 또는 2 type|num|name

데이터를 통해 HBase를 스캔 내가 데이터를 저장하는 가장 좋은 전략 인 부분 키 스캔을 사용하는 경우 어떻게 고려?

내가 내 부분 키 스캔 설정하는 방법이다 : 나는 구분 기호로 파이프를 사용하여에 추천 할 것입니다 1.

scan.setStartRow(Bytes.toBytes(num); 
scan.setStopRow(Bytes.toBytes(num+1); 

2.

scan.setStartRow(Bytes.toBytes(type + "|" + num); 
scan.setStopRow(Bytes.toBytes(type + "|" + (num+1)); 

답변

4

첫 번째의 경우를 - 즉, ASCII입니다 124와 모든 문자와 숫자 및 정렬 후 떨어지면 당신이 기대하는대로되지 않습니다 (당신이 모든 것을 버리지 않는 한 - 지나치게 큰 키를 만듭니다). HBase rowkey 구분자의 경우 올바른 정렬을 유지하기 위해 모든 유효한 키 문자 앞에 사전 식 사전을 사용하려고합니다. 탭은 ASCII 9에서 잘 작동합니다.

해당 유형에는 두 가지 유효한 값만 있고 무작위 분포라고 가정 할 때 num type으로 갈 것입니다. 앞으로 필요할 때 num을 선택하면됩니다. 역순으로 num을 선택하면 type num은 'A'유형에 대해 한 번, 'B'유형에 대해 다시 한 번 두 번 가져옵니다. 가장 효율적인 것은 아닙니다.

그냥 숫자로 선택하면 type num과 같이 사용하는 것이 가장 융통성이 뛰어납니다.

정말 두 가지를 모두 시도해보고 데이터에서 가장 잘 작동하는지 확인해야합니다.

+0

답장을 보내 주셔서 감사합니다.몇 가지 질문 : 구분 기호는 모든 행에 대해 동일하므로 정렬 순서에 어떤 영향을 미치는지 정확하게 이해하는지 확신 할 수 없습니다. 데이터 크기에 영향을 미칠 수 있습니까? –

+0

우리가 w.r.t.를 스캔하기로 결정하면. 예 : 특정 숫자는 '2'입니다. 데이터가 num | 유형으로 유지되는 경우. 가능성은 모든 2가 단일 파일에있을 것입니다. 이 경우 병렬 처리가 줄어들 것인가? –

+0

반대로 형식 | num으로 유지되면 모든 A | 2는 하나의 파일에 있고 모든 B | 2는 다른 파일에 있습니다. 2를 검색하는 동안 병렬 처리가 증가합니까? –

1

몇 가지 접근 방법이 있습니다.

1) 더 자주 스캔 할 레이아웃을 선택해야합니다. 그런 다음 빈도가 적은 검색 유형의 경우 전체 검색을 수행하거나 원하는 경우 범위로 구분하고 필터를 사용하여 원하는 항목 이외의 항목을 걸러 낼 수있는 행 필터를 구성 할 수 있습니다. 필터 : http://hbase.apache.org/apidocs/index.html

2) 데이터를 두 번 저장하여 (각 rowname에 한 번) 데이터를 복제 할 수 있습니다. 이것은 쓰기 속도를 늦추려는 것이지만 두 가지를 모두 스캔하는 경우 읽기 작업에 많은 도움이됩니다. 물론 디스크 사용도 두 배가됩니다.

3) 관련 행을 가리 키도록 대체 행 이름으로 색인을 구성 할 수 있습니다.

취하는 접근 방식은 데이터 및 읽기/쓰기 비율에 따라 크게 달라질 수 있습니다.

관련 문제