2016-11-20 83 views
2

我是Hbase的新手。需要幫助, 我有一個Hbase中的一些數據表。Hbase:自動增量列

Id Name Address 
1 john XX-XX 
2 mike XXX-XX 

Id應自動遞增。現在我必須將數據插入到表一樣,如果我們插入10記錄Id應增加至12像

Id Name Address 
1 john XX-XX 
2 mike XXX-XX 
3 foo XXXX 
... 
... 
12 booo xxx 

可能覺得在HBase的序列發生器。 有人可以幫助我的代碼。

+0

你在shell或java代碼中工作嗎? –

+0

java代碼。我們可以使用hbase中的計數器概念嗎?如果是這樣,我們該怎麼做。 – vikv

+0

閱讀有關rowkeys及其在整個地區服務器上的分佈情況,以及順序行鍵將被視爲熱點區域等的差異等。您可以使用任何具有hbase驅動程序的編程語言爲列系列創建一個連續值。另請閱讀回答這裏和問題可以重複這個 - http://stackoverflow.com/questions/26890944/hbase-auto-increment-any-column-row-key –

回答

2

HBase沒有序列生成器。正如Sergey的評論,不建議使用序列作爲行鍵。面對這樣的需求,應該仔細分析。如果你確實需要這樣的話,推薦使用salted key approach

HBase確實支持可用於生成序列的全局計數器(increment actions)。但是,這些不能以原子方式用於爲正在添加的行生成鍵值(您必須增加並獲取值,然後放入新行)。因此,如果後續放置失敗並且您有2個RPC,則可以獲得差距。

當我們以這種方式使用計數器時,我們使用鹽鍵,接受可能發生的差距,並通過塊遞增以避免每個所需密鑰的RPC。

+0

計數器:https://cloudfront.blogspot。 fr/2012/06/hbase-counters-part-i.html? –

+0

是的,你可以使用一個計數器,但是這仍然會導致錯誤的密鑰分配,並且意味着你有一個2-pass更新(一個獲取序列ID,一個使用它),這是性能打擊並且在密鑰中留下了潛在間隙如果第二次更新失敗,則使用(這可能無關緊要)。 –

+0

我同意,這是錯誤的密鑰分配。這仍然意味着HBase確實有序列生成器,可能是在原始答案之後添加的? –