2017-01-13 35 views
0

我正在使用hbase重複數據刪除高容量數據流。我認爲它使用流中每條消息的唯一標識符作爲行密鑰運行良好。但最終用戶仍然看到來自我創建的輸出流的重複數據。唯一可能的原因是重複消息在同一時間消耗。使用高容量數據對hbase進行重複數據刪除

我有大約50個線程使用同一個隊列,這個隊列是由一個單獨的進程從流中填充的。有沒有辦法確保不會發生這種情況,或者有更好的方法來實現正確的重複數據刪除?該過程涉及在插入新記錄之前執行GET操作。

回答

0

我發現您的方法存在一些問題。如果您使用50個線程讀取流,則無法確保HBase中不存在條目。有可能是2個線程會用相同的ID讀取重複的消息,檢查HBase,確定缺少條目並進一步傳遞消息。

您的併發環境中的重複檢查只能使用某種互斥鎖,並且性能取決於重複頻率,消息消耗速度和其他因素。

我建議先從單線程使用者開始,並嘗試使用併發解決方案,但前提是您對性能不滿意。對於單個線程,您可以使用散列表進行重複數據刪除。當然,它會隨着時間的推移而增長,所以你將不得不使用緩存,這將取決於業務邏輯在合理的時間內過期。