2016-09-23 91 views
2

我想設置postgres和elasticsearch。但在將數據投入到elasticsearch之前,我希望在網絡或服務器宕機時防止數據丟失。看完這個話題後:https://gocardless.com/blog/syncing-postgres-to-elasticsearch-lessons-learned/。我想出了3個解決方案。PostgreSQL with elasticsearch(保持同步) - nodeJS

  1. 創建一個數據庫表EI:store,任何新的/更新的數據添加到它。

    • 查詢過程中:插入數據到store
    • 選擇新的數據:SELECT data FROM store WHERE modified > (:last modified time from elasticsearch)
    • 發送 「新」 的數據到elasticsearch
  2. 使用Redis的到pub/sub請求,並作出elasticsearch聽/認購即將到來的數據。如果彈性搜索中斷,數據將排隊

  3. 在事務處理期間將任何錯誤捕獲到彈性搜索並將數據保存到安全位置(ei:store上述表)。然後有一個cron工作推回這個數據。


當然最簡單的事情將是插入數據馬上elasticsearch。但這樣做會阻止數據在損壞期間存儲在安全的地方。 1在我看來太慢了,不像2。而3需要維護錯誤處理代碼。

現在2是我的選擇。


有沒有更好的方法來做到這一點?我想聽聽您的意見和建議

:d

+0

只是好奇,怎麼會處理將刪除情況1.我只是探索選項來做你是什麼做... – FacePalm

+1

此外,檢查了此... https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html – FacePalm

+0

@FacePalm看到anwser – Antartica

回答

0

Redis的(2)是不可靠的。

我決定將數據立即添加到elasticsearch並將數據添加到updates表。然後在連接到elasticsearch客戶端後立即運行sync()函數(如果集羣發生故障)+每24小時運行一次cron作業以啓動sync()。所有sync()所做的是從updatesA和elasticsearch B中選擇最新的數據(時間或ID),並比較是否有記錄A > B。如果是這樣,請使用批量API插入數據。

希望這有助於:)

,我仍然打開,建議和fedback ...