2013-03-14 2 views
5

나는 RDBMS 배경에서 왔고 최근에 HBase를 읽었습니다. 나는 2 차 인덱스가 없음을 이해하고 우리는 같은 것을 수행하려고해서는 안 다음 정보의 모든 행 키 자체를 만드는 데 사용할 수 있는지 궁금HBase : 행 키 크기

SELECT * FROM tbl_photo WHERE album_id = 1969 

.

예 : 사진 공유 서비스 제공 업체의 이메일 주소를 가진 사용자가 있습니다. 사용자는 앨범을 만들 수 있으며 (여러 앨범을 만들 수 있음) 사진을 업로드 할 수 있습니다. 다른 사용자는 사진에 댓글을 달고 일부 사용자는 댓글의 위/아래에 투표합니다.

그런 투표를 식별하는 열쇠는 email:album:ts:photo:ts:comment:ts:vote:ts처럼 보일 수 있습니다. 이 키가 의미가 있습니까? 추천보다 오래 걸리나요? (ts stands timestamp)

답변

7

이것은 의미가 있지만 귀하의 모든 정보가 귀하의 키에 있다면 귀하의 칼럼에 무엇을 저장할 것입니까? 그리고 당신은 항상 클라이언트 애플리케이션 관점에서 그 키를 형성 할 수 있습니까? HBase 스키마 디자인은 꽤 어려운 주제이며, 여유 시간이 있다면 작년의 HBaseCon에서이 비디오를 반드시보아야합니다 : HBase Schema Design by Ian Varley.

HBase 행 키를 디자인 할 때 가장 중요한 점은 "데이터를 어떻게 검색합니까?"입니다.

(귀하의 예제처럼) 특정 앨범에서 사진을 검색 할 경우, 왜 email:album 같은 행 키 뭔가를하고 다른 열 가족 사진, 의견을 보관하지 ...

이렇게하면 특정 사진을 검색하려면 모든 앨범을 스캔해야합니다. 그래서 이것을 방지하기 위해 대신 email:picture을 키로 사용할 수 있지만이 방법은 다른 방법으로 같은 문제를 만듭니다. email:album:picture을 사용할 수도 있지만 특정 앨범에서 모든 사진을 가져 오려면 사진의 식별자를 알아야합니다. 그렇지 않으면 키를 구성 할 수 없습니다. 예를 들어 사용자가 CAN 전용 2,000 이미지가 있다면 한편

다음이 HBase를 문제가되지 않을 것이다 email:picture 또는 키로 email:album를 사용 album 또는 picture하는 컬럼 필터를 지정하는 것 2,000 최대 행을 반복 그렇게 오래 걸리지는 않습니다.

즉, 사용중인 HBase의 버전에 따라 FuzzyRowFilter을 사용하는 일종의 보조 색인을 구현할 수 있습니다.

관련 문제