2011-12-15 75 views
2

我有一個小問題 - 我無法理解如何在HBase中創建交易(或模擬它)。例如,有兩個表,我想在第一個表中插入值,在第二個表中更新值。我發現HTable有方法:HBase中的交易模擬

void batch(List<Row> actions, Object[] results) 
//Method that does a batch call on Deletes, Gets and Puts. 

但它只適用於一個表。谷歌搜索,我發現MultiAction類:

的容器操作(即獲取,刪除或PUT),這是由 regionName分組。打算使用HConnectionManager.processBatch()

這是我在找什麼?如果是的話,我不明白什麼是region。 感謝您的幫助。

回答

3

HBase不支持事務。 雖然你在單表上有一些獨立的東西,但是如果你需要更新一個以上的東西,你會注意到像事務。 交易意味着4件事情的首字母縮寫ACID。簡而言之

  • 原子性 - 在交易發生變化在一起(「全有或全無」)。
  • 一致性 - 國家應該保持有效
  • 隔離 - 交易以外的業務無法看到
  • 耐久性半變動(中間不一致的狀態) - 變化應堅持

你不得不改變HBase的代碼以獲得隔離,但如果你可以放寬這一要求,你可以實現一個事務協調員,這將大致做類似於

  • 保存需要在tra中完成的事情nsaction在一個特殊的表(事務日誌)
  • 執行第一個變化
  • 執行第二個變化
  • 請驗證完成,如完成標記事務的步驟
  • 恢復轉到事務日誌和完整/回滾時改變

需要注意的是,因爲你沒有隔離有時回滾是不是一種選擇,那麼你需要實現補償邏輯(也看一看在saga pattern

1

有一些項目旨在在HBase之上提供一個事務層,比如Omid,我對此做出了貢獻。