1
我正在寫入HBase集羣。如果數據不存在,我必須寫入,因此我使用checkAndPut()
。但與put(List<Put>)
相比,性能較差。有什麼辦法可以將這兩種操作結合起來嗎?我試圖環顧四周,但找不到任何東西。任何方式實現與HBase中的checkAndPut一起批處理
我正在寫入HBase集羣。如果數據不存在,我必須寫入,因此我使用checkAndPut()
。但與put(List<Put>)
相比,性能較差。有什麼辦法可以將這兩種操作結合起來嗎?我試圖環顧四周,但找不到任何東西。任何方式實現與HBase中的checkAndPut一起批處理
當您使用checkAndPut()
時,您爲每個請求執行一次RPC調用。所以,你不能達到每秒1/rtt
請求的性能(rtt是往返時間)。如果你的客戶端和服務器之間的時間間隔爲1ms,那麼理論上的最大值是1000bps。當使用像put(List<Put>)
這樣的批處理操作時,您需要少得多的RPC調用,從而導致性能提升。我看到兩種解決問題的方法:
使用工作人員池來並行請求。您可能會發現有用的HTablePool
類用於管理員工中的連接。
如果您不需要了解操作狀態(插入新的單元格或舊的單元格),您可以嘗試編寫協處理器,在單元存在的情況下以靜默方式放置放置請求。在這種情況下,如果您需要更換某個單元格,則必須先將其刪除。