2012-03-05 8 views
9

Hbase 문서에서는 Hbase가 2-3 개 이상의 열 패밀리를 잘 처리하지 않기 때문에 2-3 개 이상의 열 패밀리를 작성하지 않는다고 말합니다. 그 이유는 압축과 플러싱, 그리고 IO 때문입니다. 그러나 내 모든 열이 항상 채워지면 (모든 행에 대해) 다음이 추론은 중요하지 않으므로 열에 대한 내 액세스가 완전히 무작위 (모든 열의 조합에 액세스하려는 경우)를 고려하면 - 열 패밀리 - 하나의 열 구성 (효과적으로 순수한 원주 형으로 만들려고).Hbase 열 패밀리

많은 블로그/위키가 설명되어 있지만 모두 모순되어 더 많은 혼란을주는 것처럼 보입니다. Hbase가 한 열 패밀리를 선호한다는 사실을 소화 할 수없는 것 같습니다. 그러면 열의 점은 무엇입니까?

답변

21

현재 (변경 될 것으로 예상 되더라도) 영역의 모든 열 패밀리가 함께 플러시됩니다. 이것은 사람들이 "HBase가 2 개 또는 3 개 이상의 컬럼 계열을 잘 처리하지 못한다"고 말하는 주된 이유입니다. 각 열이 하나씩있는 두 개의 CF를 생각해보십시오. A 열 : A는 전체 웹 페이지 텍스트를 저장합니다. 열 B : B는 페이지의 단어 수를 저장합니다. 따라서 A : A (A : A의 데이터가 훨씬 크기 때문에 더 자주 발생합니다)가 플러시 될 때마다 B : B에 대한 I/O 저글링 라우팅을 별도로 수행해야합니다. B : B 만 가지고 있으면서도 홍수가없이 몇 달 간 갈 수 있습니다.

A와 B를 같은 열 패밀리 (A : A와 A : B)에 저장하면 플러시 입출력 성능이 훨씬 좋아지며 대부분의 HBase 읽기가 단순히 memstore에서 나온 것이기 때문에 아마 읽기 속도가 동등하다는 것을 알아낼 것입니다.

더 중요하게는 열의 카디널리티가 크게 다른 경우 영역 서버는 밀도가 낮은 열 패밀리에 대해 쓸모없는 대부분 빈 파일을 유지해야합니다. 이것은 결코 바뀌지 않을 것입니다.

모든 내용은 HBase Book에서 사용할 수 있습니다.

따라서 이러한 모든 성능 상황 에서처럼 "올바른"경로를 결정하기 전에 측정을 측정하십시오.

+0

설명해 주셔서 감사합니다. – PrakashT

+0

제 경우에는 이해할 수있는 한 두 가지 옵션이 있습니다 : a) 한 컬럼에 모든 컬럼이 있습니다. 이것은 1-2 열만 액세스해야하는 대부분의 시간 동안 성능에 영향을 미치지 만,이 디자인을 사용하면 전체 행을 읽을 수 있습니다. 이러한 읽기는 많은 지역 서버에 분산되지만 2) 나는 가족과 같이 크기가 비슷한 칼럼을 나눕니다. – PrakashT

+2

전체 행을 읽는 것에 대해 걱정하지 않아야합니다. HBase는 실제로 필요한 것을 읽는 것만으로도 매우 좋습니다. 읽을 필요가있는 셀이 메모리에 있다면 HBase는 디스크 IO를 전혀 추가하지 않습니다. –

관련 문제