目标:使用postgres数据库同步elasticsearch 为什么:有时候newtwork或群集/服务器中断,以便记录未来的更新
这篇文章https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建议我创建一个单独的表id
,它将同步elasticsearch' client
,允许从上一条记录中选择新数据(来自数据库) (在elasticsearch中)。所以我想如果我能记录弹性搜索的失败和成功的连接:如果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
syncProcess
这样,我甚至不用担心运行cron作业(如果问题 1 是正确的),因为我知道集群正在运行。
问题
export default client
之前会syncProcess
运行吗?在同步时,我不希望有任何请求进入......
import
应该只运行一次(因为它已被缓存/未导出),无论我elasticConnect.js
updates
多少次。正确的吗?
使用{{1}}表的方法是否有任何优势,而不是仅从父/源表中选择数据?
文章'评论说" 不要使用时间戳来比较新数据!"。嗯......为什么?它应该没问题,因为数据库是阻塞的,对吗?
答案 0 :(得分:1)
对于1:因为它不保证在客户端导出时syncProcess
将运行。相反,你应该在this answer中做一些事情,然后输出一个承诺。
For 2:根据我在上述问题中链接的解决方案,这将得到解决。
对于3:更新表也会捕获记录删除,而只是从数据库中选择不会,因为您不知道哪些记录已经消失。
For 4:你链接的文章之后的第二条评论提供了答案(提示:时间戳不是严格单调的)。