2012-11-01 58 views
2

爲了簡單起見,我們可以說我有一個表,其中主鍵邏輯上應該是一個很長的表。
目前,我從一個項目中繼承了(使用關係數據庫),我有一個IDMaker類,它返回一個我在(在該項目中)作爲主鍵的長整型。HBase:行鍵組合

我說可能,因爲據我瞭解,因爲這個ID是基於時間戳和單調遞增的,它不是一個HBase的行鍵一個很好的候選人。

現在,讀

http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-bad/ http://hbase.apache.org/book/rowkey.design.html
和「HBase的權威指南」的第9章由拉爾斯喬治,

我看到「鹽析」優勢戰略可能適合我的需要。這基本上爲我的鑰匙添加了一個前綴,因此打破了單調系列。
現在的問題是:使用策略這樣的,從這個IDS開始:

假設這些關鍵到一個域服務器,並且改造那些ID,如此(前綴是當然的一例)

0:1
7:2
9:3
一:4

我怎麼能肯定的是,四大行不會還是去同一區域的服務器?換句話說,我怎麼能確定我的前綴足以避免在這裏很好地描述http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-bad/

回答

2

我怎樣才能確定這四行不會仍然去同一地區 服務器?換句話說,我怎麼能相信,我的前綴,就足以避免 這裏什麼很好的描述

你有沒有在節2.5.2.7讀取。已經在Important Configurations管理拆分了嗎?

+0

感謝您的提示。我剛剛閱讀了該部分,但是,雖然更清楚,但我的問題仍然存在......您是否閱讀過上面的BigTable文章?我想了解A-L和M-Z的界限來自 – Andrea

+0

是的,我知道Ikai的職位。現在,你說'邊界來自哪裏'是什麼意思?從*你* :) –

+1

啊,還有一件事。我想知道你是否真的仔細閱讀這篇文章,因爲Ikai在途中給你的最重要的提示是最後的結果:'不要過早地優化這個案例,因爲有機會,你不會碰到它「。 - 說了這個,你是100%肯定你有這種情況嗎? –

0

我怎樣才能確定這四行將不會仍然去相同的區域服務器?

你應該根據你的哈希模式預分割你的表。

例如,如果將使用0-1-2-3-4-5-6-7-8-9-A-B-C-d-E-F以進行鹽析。您可以爲該hbase表創建16個分割。每個分割應該有0作爲開始 - 1作爲結束行,1作爲開始 - 2作爲結束行..像這樣。您可以從hbase shell或java代碼中執行此操作。我更喜歡java,因爲我可以使用for循環創建許多分割:)

至於過早優化,分割過多會影響性能。