目的:與Postgres數據庫同步elasticsearch
爲什麼:有時newtwork或羣集/服務器突破使將來的更新應該被記錄同步elasticsearch - 的NodeJS
本文https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建議我應該創建一個單獨的表updates
,它將同步elasticsearch的id
,允許從最後一條記錄(在elasticsearch中)選擇新數據(從數據庫)。所以我想如果我可以記錄elasticsearch的失敗和成功的連接:如果client
歸屬成功(返回一個承諾),我可以啓動一個函數來同步記錄與我的數據庫。
這裏是我的elasticConnect.js
import elasticsearch from 'elasticsearch'
import syncProcess from './sync'
const client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
client.ping({
requestTimeout: Infinity,
hello: "elasticsearch!"
})
.then(() => syncProcess) // successful connection
.catch(err => console.error(err))
export default client
這樣一來,我甚至都不需要擔心運行cron作業(如果問題是正確的),因爲我知道,集羣正在運行。
問題
請問
syncProcess
export default client
前跑?我不希望任何請求,而在未來同步...syncProcess
應該只運行一次(因爲它的緩存/不出口),無論我import
elasticConnect.js
多少倍。正確?使用
updates
表的方法是否有任何優勢,而不是從父/源表中選擇數據?該文章的評論說「不使用時間戳來比較新數據!」.Ehhh ...爲什麼?它應該沒問題,因爲數據庫被阻止,對吧?
問題:在文章中他們只提到「爲了同步,運行cron job」。但是這不可能是正確的,因爲來自elasticsearch的last_squence_id將被改變,因此丟失了舊的更新。所以我需要確保在將數據插入到elasticsearch之前進行同步,對嗎? – Antartica