HBase 스키마를 설계하는 방법은 무엇입니까?
문제
이 RDBM 테이블이 있다고 가정 해Entity-Attribute-value_model):
col1: entityID
col2: attributeName
col3: value
그리고 스케일링 문제로 인해 HBase를 사용하고 싶습니다.
HBase 테이블에 액세스하는 유일한 방법은 기본 키 (커서)를 사용하는 것입니다. 특정 키에 대한 커서를 얻을 수 있고 행을 하나씩 반복 할 수 있습니다.
문제는 제 경우에는 3 개의 열을 모두 반복 할 수 있기를 원한다는 것입니다. 예를 들어 :
- 주어진 EntityId의 경우 모든 속성과 가치를 얻고 싶습니다.
- Attributeame과 가치를 기부하기 위해 나는 모든 initiids에 ...
따라서 내가 가진 아이디어 중 하나는 데이터를 보유하는 HBase 테이블 하나 (EntityID를 기본 색인으로 사용하는 테이블 데이터), 기본 키로 속성을 가진 2 "색인"테이블을 구축하는 것입니다.
각 인덱스 테이블에는 데이터 테이블에 대한 포인터 (EntityIds) 목록이 보유됩니다.
합리적인 접근 방식입니까? 아니면 HBase 개념의 '남용'입니까?
HBase를 사용하면 기본 키 및 스캔 (생각 : 커서)을 통해 행 범위를 통해 GET 작업을 허용합니다. (규모와 2 차 지수가 모두 필요하다면, 걱정하지 마십시오 - 루센은 구조대에! 그러나 그것은 또 다른 게시물입니다.)
루센이 어떻게 도울 수 있는지 아십니까?
- 야나탄
해결책
2 차 지수는 실제로 HBase의 많은 잠재적 응용 프로그램에 유용 할 것이며, 개발자들이 실제로 그것을보고 있다고 생각합니다. 점검 http://www.mail-archive.com/hbase-dev@hadoop.apache.org/msg04801.html.
그 동안 응용 프로그램 데이터 저장소를 스타 스키마로 모델링 할 수있는 경우 http://en.wikipedia.org/wiki/star_schema) 하이퍼 테이블이 보조 인덱스 유형이 필요한 솔루션을 체크 아웃 할 수 있습니다. http://markmail.org/message/rphm4q6cbar2ycgp
다른 팁
EntityId가 주어진 속성+값을 찾는 하나와 하나는 EntityId가 주어진 속성+값을 찾기위한 두 가지 플랫 테이블을 사용하는 것이 좋습니다.
표 1은 다음과 같습니다.
entityID1 {
attribute1: value1;
attribute2: value2;
...
}
및 표 2 :
attribute1_value1 {
entityID1;
}
attribute2_value2 {
entityID1;
}