2014-01-07 4 views
3

2 억 개의 레코드가있는 Hbase 테이블이 있습니다. 각 레코드에는 열 한정자에 각각 저장된 레코드를 설명하는 몇 가지 속성이 있습니다. (대부분 int 또는 문자열 값) 열 한정자를 기반으로 페이지 매김 및 정렬 된 레코드를 볼 수 있어야한다는 요구 사항이 있습니다 (또는 하나 이상, 미래에). 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 보조 프로세서 (huawei의 대부분 hindex)를 사용하여 보조 인덱스를 조사했지만 사용 사례와 정확히 일치하지 않는 것 같습니다. 나는 또한 모든 데이터를 여러 개의 테이블로 복제하는 것에 대해 생각해 보았다. 하나는 각 sort 속성에 대해 하나는 rowkey에 포함 된 다음 쿼리를 해당 테이블로 리디렉션하는 것이다. 하지만 이미 몇 가지 소위 속성이 있기 때문에 이것은 매우 지루해 보입니다.컬럼 한정자에 대한 Hbase 정렬

주셔서 감사합니다.

답변

3

RDBMS와 마찬가지로 작동하는 NoSQL 데이터베이스가 필요합니다. 기하 급수적 인 성장을 기대하지 않는 한 데이터의 크기가 커지면 삶이 훨씬 더 간단해질 것입니다. :) 또한, 데이터가 업데이트되면 좋은 결정을 내리는 것이 매우 중요합니다. 일종의 그것과 상단 X를 검색, 스캔을 할 수있는 맵리 듀스 작업을 쓰기 : 당신이 결과를 기다릴 수 있다면

  • :

    , 당신은 선택의 여지가 있다고하는 데, 여기에 몇 가지 있습니다 실제로 각 정렬 유형에 대해 1000 페이지 (20-50k 행)가 필요합니까? 또 다른 옵션은 Hive과 같은 것을 사용하는 것입니다.

  • 데이터를 집계하고 데이터 집합을 "줄일"수있는 경우 : MapReduce 태스크를 작성하여 최신 집계 데이터를 SQL 테이블 (쿼리를 처리 함)로 주기적으로 내보내십시오. 나는 이것을 몇 번 해보았고 매력처럼 작동하지만 요구 사항에 따라 다릅니다.

  • 충분한 저장 공간이있는 경우 : 각 속성에 대해 새 테이블을 주기적으로 다시 생성 (또는 추가)하기 위해 MapReduce 작업을 작성하십시오 (행 키에 정렬). 여러 개의 표가 필요하지 않으며 각 사례에 대해 행키에 접두어 만 사용하거나 표를 원하지 않고 많은 검색어가없는 경우 정렬 된 데이터를 csv 파일에 쓰고 HDFS는 프론트 엔드 앱에서 쉽게 읽을 수 있습니다.

  • 보조 색인을 수동으로 유지 : 스키마 업데이트 및 새 속성에는 거의 영향을 미치지 않지만 거의 실시간 결과에는 유용합니다. 이를 수행하려면 코드를 갱신하여 성능이 우수한 영역을 피하면서 성능을 향상시키는 데 도움이되는 우수한 버퍼로 보조 테이블에 기록해야합니다. 이 유형의 행키에 대해 생각해보십시오. [4B SORT FIELD ID (4 chars)] [8B SORT FIELD VALUE] [8B timestamp], 주 테이블의 행 키를 저장하는 열이 하나뿐입니다. 모든 필드로 정렬 된 데이터를 검색하려면 SORT FIELD ID를 시작 행으로 사용하고 페이지 정렬의 피벗으로 시작 정렬 필드 값을 사용하여 SCAN을 수행하십시오 (첫 페이지를 가져 오기 위해 무시한 다음 마지막으로 검색 한 값을 설정). main 테이블의 rowkeys를 가지게되면 전체 데이터를 검색하기 위해 multiget을 수행 할 수 있습니다. 주 테이블을 스캔하고 기존 행에 대한 인덱스 테이블에 데이터를 쓰려면 작은 스크립트가 필요합니다.

  • 언급 한 것처럼 보조 프로세서를 통한 자동 2 차 색인 생성에 의존하지만,이 옵션을 전혀 좋아하지는 않습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 추가 할 몇 가지 사항 : 몇 가지 업데이트 유스 케이스가 있지만 그 중 아무 것도 공간 정렬을 원하는 모든 속성을 업데이트하지는 않지만 우려되는 것은 아니지만 실시간 결과를 얻는 것입니다. 데이터 증가에 관해서는 평균 월 평균 약 10 ~ 20 백만 개의 새로운 레코드를 기대하고 있습니다 –

+0

이 경우 실시간 보조 인덱스가 필요합니다. 수동으로 수행하는 방법에 대한 추가 정보를 추가했습니다. . 희망은 내 접근 방식을 이해 : –

+0

나는 완전히 귀하의 접근 방식을 이해하고 유스 케이스에 가장 적합한 것 같아요 (비록 구현 및 유지 :)) 빠른 아니지만. 고마워요! –

1

대부분 옵션을 나열했습니다. HBase는 기본적으로 보조 인덱스를 지원하지 않습니다. 또한 당신이 보조 인덱스에 추가 JDBC 드라이버 및 SQL 지원이 피닉스 (세일즈 포스에서)

https://github.com/forcedotcom/phoenix

을 고려할 수있다 hindex합니다.

관련 문제