2010-07-12 46 views
3

我見過的建議的兩種矛盾的作品,當談到在HBase的設計行ID,(特別是,但我認爲它適用於卡桑德拉爲好。)面向列的數據庫中的順序行ID(HBase,Cassandra)?

  1. ,你會被聚集在一起的鍵組經常要利用數據局部性。 (白,Hadoop的權威指南。我記得看到它在HBase的網站,但無法找到它...)左右
  2. 傳播鍵,以便工作可以在多臺機器分佈(Twitter, Pig, and HBase at Twitter幻燈片14)

我猜哪一個是最優的可以取決於你的用例,但是沒有人有任何一種策略的經驗嗎?

回答

2

在HBase中,通過劃分按字典順序排列的關鍵空間,將表分爲多個區域。表中的每個區域都屬於單個區域服務器,因此所有讀取和寫入操作都由該服務器處理(這可以提供強有力的一致性保證)。這意味着如果您的所有讀取或寫入都集中在小範圍的密鑰空間中,那麼您將只能擴展到單個區域服務器可以處理的內容。例如,如果您的數據是時間序列並以時間戳記爲鍵,則所有寫入都將轉到表中的最後一個區域,並且您將被限制爲以單個服務器可以處理的速率進行寫入。另一方面,如果您可以選擇您的密鑰,以便任何給定的查詢只需要掃描一小段範圍的行,但整套讀寫操作遍佈在您的密鑰空間中,那麼總負載將會分發和規模很好,但您仍然可以享受您的查詢所在地的好處。