2017-11-08 13 views
0

비트 올림 된 정수 플래그 또는 합계 열과 같이 덮어 쓰지 않고 점진적으로 업데이트되는 열이 있다고 가정합니다.hbase에서 셀 병합을 수행 할 수 있습니까?

기존 셀 : [키 'K1', F1 : 합계 : 100]
Upcomming 새로운 셀 : [키 'K1', F1 : 합계 : 200 (예를 들어, 단지 1 개의 버전을 가정) 합계 = 100 + 200 = 300 최종 기록 항복 :
[키 'K1', F1을 :]

그럼 I 셀 데이터 이런 식으로 업데이트 할 합계 : 300]

여기 내가 원하는 MERGE 새 셀을 동일한 키가있는 이전 셀에 넣습니다. 어떻게해야합니까? 직접 을 입력하면을 입력하면 기존 셀을 덮어 쓰게됩니다. (다시 한 가지 버전 만 유지됩니다).

나는 몇 가지 아이디어를 제공하지만, 그래도 만족하지 않는 것 :

1> 클라이언트 측에서 먼저 이전 값은 다음 객체를 넣어가는에에 합계를 추가를 얻을.

2> 보조 프로세서를 사용하십시오. RegionObserver.prePut에서 get, add 및 final을 수정합니다 넣어 개체입니다. 이것은 계산을 서버 측에 푸시하지만 추가 쿼리 (get) (비싼)가 먼저 필요합니다.

실시간 쿼리 시나리오에서 위의 작업 외에도 대량로드 데이터 병합은 무엇입니까?

나는 꽤 오랫동안 문서를 검토했지만 아직 단서를 찾을 수 없습니다. 이것에 대해 몇 가지 생각을 나눌 수 있다면 정말 고맙겠습니다.

저는 hbase-1.2.6을 사용하고 있습니다. 감사!

답변

0

올바른 사용법을 이해하고 값이 긴 정수가 될 경우 HBase 증가 작업이 효과가 있다고 생각합니다. 자세한 내용은 HBase 1.2.6 javadoc (Increment)을 참조하십시오.

원하는 산술 증가 값이 아니라면 HBase도 Append 연산을 사용하여 더 많은 데이터를 기존 셀에 원자 단위로 추가 할 수 있습니다.

javacdoc에는 Increments 및 Appends가 쓰기에 대해 원 자성을 보장하지만 읽기에는 해당되지 않는다고 언급되어 있습니다. 이는 부정확합니다. 그들은 실제로 (HBase 0.95부터) 읽기에 대해서도 원 자성을 보장합니다. 그리고 이것은 이후 릴리스의 문서에서 수정되었습니다.

또한 Increment 및 Append 작업은 추가 Get rpc를 수행하지 않습니다. 그들은 서버 측에서 행 잠금을 취한 다음 동일한 잠금 아래에서 서버에 대한 쓰기 작업을 수행하여 작동합니다.

+0

필자의 경우 새로운 셀 값은 기존 셀에 따라 달라지며 단순한 incr 또는 append보다 더 복잡 할 수 있습니다. 예를 들어, 나는 정수형 K 인 오래된 셀 값을 가지고 있으며이를 K_new = K^K '로 업데이트하려고합니다. 여기서 K'는 생산에서 값의 증분 종류입니다. 어쩌면 관련 API를 찾았습니다. 표 :: checkAndPut (https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut-byte:A-byte:A-byte : A-byte : A-org.apache.hadoop.hbase.client.Put-). 하지만 어떻게 사용하는지 모르겠습니다. 도움이 될 것이라고 생각하십니까? 감사. – user1206899

+0

나는 위에 나열된 API 만 원자 조작을 달성하는 데 도움이된다고 생각합니다. 결국 나는 어떤 의미에서든 풋을 뒤따라해야합니다. – user1206899