2012-11-28 33 views
1

我正在寫入HBase集羣。如果數據不存在,我必須寫入,因此我使用checkAndPut()。但與put(List<Put>)相比,性能較差。有什麼辦法可以將這兩種操作結合​​起來嗎?我試圖環顧四周,但找不到任何東西。任何方式實現與HBase中的checkAndPut一起批處理

回答

5

當您使用checkAndPut()時,您爲每個請求執行一次RPC調用。所以,你不能達到每秒1/rtt請求的性能(rtt是往返時間)。如果你的客戶端和服務器之間的時間間隔爲1ms,那麼理論上的最大值是1000bps。當使用像put(List<Put>)這樣的批處理操作時,您需要少得多的RPC調用,從而導致性能提升。我看到兩種解決問題的方法:

  1. 使用工作人員池來並行請求。您可能會發現有用的HTablePool類用於管理員工中的連接。

  2. 如果您不需要了解操作狀態(插入新的單元格或舊的單元格),您可以嘗試編寫協處理器,在單元存在的情況下以靜默方式放置放置請求。在這種情況下,如果您需要更換某個單元格,則必須先將其刪除。

相關問題