目的:与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