我想同步兩個依賴數據庫(elasticsearch和casandra)與我的父數據庫:postgres。我正在嘗試在本文中實現一種方法:https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html。所以,我想出了2種方法同步elasticsearch&cassandra與postgres數據庫
Sync之前更新/插入數據相關的數據庫
router.put('/account/edit', function(req, res) { syncElasticWithDatabase().then(() => { elastiClient.update({...}); // client for elasticsearch cassandraClient.execute({...}); // client for cassandra req.end(); }) })
syncElasticWithDatabase()
在updates
表使用數據(從postgres的),這種方法可以是因爲慢有些人不得不等待syncElasticWithDatabase()
完成。我喜歡這種方法,因爲我利用了(詳細檢查文章)。數據在新數據進入之前同步,允許依賴關係追上,只有遺漏數據纔會同步。與下面的選項2不同,防止重新索引/重新插入。
使用底色處理(EI:在運行每24小時),我可以同步通過選擇數據從
update_error
表,它包含當elasticsearch或卡桑德拉失敗數據「錯過了數據」 。這裏有一個粗略的例子router.put('/account/edit', function(req, res) { psqlClient.query('UPDATE....').then(() => { elastiClient.update({...}); // client for elasticsearch cassandraClient.execute({...}); // client for cassandra }).catch(err => { psqlClient.query('INERT INTO update_error ....') }) })
但是這種方法需要重新索引或重新插入數據,因爲在某些情況下,同時卡桑德拉沒有或兩種方式elasticsearch可以插入數據。因此,我需要一個單獨的列來記錄失敗的數據庫類型。這樣我可以選擇自上次同步時間以來每種數據庫(ealsticsearch或cassandra)失敗的數據。
方法1,似乎完美的,但是這將意味着某些人將不得不等待更長的時間比其他帳戶更新由於
syncElasticWithDatabase()
。然而上面的文章完全一樣(看他們的圖)還是我誤解了一些東西?由於上述延遲(如果我是正確的),我介紹了選項2.然而,它只是太多,以同步恕我直言。然而,我花了很長時間思考這個......所以有比1和2更容易或更好的方法嗎?
Apache Zoo Keeper會幫助我的情況嗎?
問題:
謝謝:)
其他參考
Sync elasticsearch on connection with database - nodeJS
https://gocardless.com/blog/syncing-postgres-to-elasticsearch-lessons-learned/
我們怎麼批量導入的Postgres表elasticsearch在Windows! –