문제

다음 HBASE 스키마 시나리오가 주어지면 (공식 FAQ에서)...

학생과 코스와 같은 두 엔티티 사이의 다수의 연관성을위한 HBase 테이블을 어떻게 설계 하시겠습니까?

나는 두 개의 테이블을 정의 할 것이다 :

학생 : 학생 ID 학생 데이터 (이름, 주소, ...) 과정 (여기서는 코스 ID를 열 예선으로 사용)

코스 : 코스 ID 코스 데이터 (이름, 강의 계획서, ...) 학생 (학생 ID를 열 예선으로 사용)

이 스키마는 쿼리에 빠르게 액세스 할 수 있고, 학생 (학생 테이블, 코스 가족) 또는 수업의 모든 학생 (코스 테이블, 학생 가족)을위한 모든 수업을 보여줍니다.

요청을 어떻게 만족시킬 것인가 : "적어도 두 개의 코스를 공유하는 모든 학생들에게 주어주세요."? 해당 세트를 반환 할 HBase에서"쿼리 "를 작성할 수 있습니까? 아니면 모든 관련 데이터를 검색하고 코드로 직접 위기를해야합니까?

도움이 되었습니까?

해결책

설명 된 쿼리는 관계형 데이터베이스에 더 적합합니다. 그러나 결과를 사전 계산하여 쿼리에 신속하게 답변 할 수 있습니다. 예를 들어, 열쇠가 공통 수업 수인 테이블이있을 수 있으며, 셀은 공통점이있는 개별 학생입니다.

"학생들이 클래스 X 및 클래스 Y에있는"과 같은 질문에 답변하기 위해 변형을 사용하여 수업을 키의 조각으로 사용하십시오 (알파벳 순서 또는 적어도 일관된 것). 학생.

다른 팁

이 유형의 쿼리는 0.20.0 API를 통해 사용할 수 없습니다. 나는 그것에 대한 계획이 있는지 확실하지 않습니다 (곧 그것이 나타날 것이라고 의심합니다). HBase 웹 사이트에서 로드맵 세부 사항을 찾을 수 있습니다. ~할 것 같다 그 질문에 대답하십시오.

자신의 응용 프로그램에서 답을 계산해야합니다 (나는 잘못되었다는 것이 입증되지만).

파일러를 사용하여이를 달성하십시오.

SingleValueFiler filer = 새로운 SingleValueFiler (및 API에 근거한 인수);

이것을 scan에 추가하십시오 (org.apache.hadoop.hbase.client.scan scan = new scan (); scan.setfiler (필터);

Mapreduce는 이것을 해결하는 한 가지 방법이 될 수 있습니다. 불행히도 그것이 즉시 결과를 얻지 못할 것입니다. 지도 단계에서 한 쌍의 학생들이 같은 수업에 참여할 수있는 횟수를 계산할 수 있습니다. 감소 단계에서 쌍을 합계하고 합이 2 이상인 쌍을 기록 할 수 있습니다. 이 접근법은 "X"과정을 가진 학생들의 쌍을 나타내는 지수를 사전 생성하는 데 사용될 수 있습니다 (앞에서 제안한 바와 같이). 이러한 색인의 핵심은 "X/Student1_Key/Student2_Key"라인을 따라 무언가 일 수 있습니다. 여기서 X는 공통의 과정 수입니다. 인덱스 (예 : x> = 2)를 스캔하면 답변을 제공합니다. HBase가 MapReduce와의 기본 통합을 감안할 때 이러한 라인을 따라 솔루션을 간단해야합니다.

또한 BigTable 모델을 따라 두 개의 테이블을 만들 필요조차 없습니다. 코스 : 또는 학생 :과 같은 "종류"로 각 레코드 키보다 우선합니다. 행은 사전으로 주문되므로 친절하게 쉽게 스캔 할 수 있습니다. 각 종류의 속성을 지원하는 데 필요한 열을 채우거나 생성하십시오. HBase는 매우 드문 테이블을 지원하기 때문에 잘 작동합니다. 키를 선택하고 BigTable을 사용한 지수 개발에 대한이 훌륭한 프레젠테이션을 참조하십시오. http://www.google.com/events/io/2009/sessions/buildingscalablecomplexapps.html. 이 프레젠테이션은 효율적인 검색을 위해 HBase와 같은 데이터베이스에 물건을 저장하는 방법을 이해하는 데 실제로 도움이되었습니다.

그러나 원래의 질문으로 돌아가서 HBASE로 작업 할 때 데이터를 어떻게 사용하는지 알아야하므로 적절한 지수를 미리 개발하여 빠른 답변을 얻을 수있는 방법을 알아야합니다. 임의의 Ad-Hoc 쿼리가 항상이 모델에서 작동하는 것으로 보이지 않습니다.

어쨌든, 나는 또한 이것에 익숙하지 않으므로 이러한 문제와 가능한 솔루션과 같은 문제를 보는 것이 도움이됩니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top