node.js-在与数据库的连接上同步elasticsearch-nodeJS

目的:将Elasticsearch与Postgres数据库同步
原因:有时网络或群集/服务器中断,因此应记录将来的更新

这篇文章https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建议我应该创建一个单独的表更新,该更新将同步elasticsearch的id,从而允许从最后一条记录(在elasticsearch中)选择新数据(从数据库中).因此,我想如果可以记录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

这样,我什至不必担心运行cron作业(如果问题1是正确的),因为我知道集群正在运行.

问题

> syncProcess是否在导出默认客户端之前运行?同步时,我不希望收到任何请求…
>无论我导入elasticConnect.js多少次,syncProcess都应该只运行一次(因为它已缓存/未导出).正确?
>将方法与更新表一起使用,而不是仅从父/源表中选择数据,有什么好处?
>文章评论说“不要使用时间戳来比较新数据!”.因为数据库正在阻塞,所以应该没事吧?

最佳答案
对于1:因为您不保证在客户端导出之前syncProcess已经运行.相反,您应该执行this answer中的操作并导出promise.

对于2:有了上述问题中与我联系的解决方案,这将得到解决.

对于3:由于您不知道哪些记录已消失,所以更新表也将捕获记录删除,而仅从数据库中选择不会删除.

对于4:您链接到的文章后面的第二条评论提供了答案(提示:时间戳记并非严格单调).

转载注明原文:node.js-在与数据库的连接上同步elasticsearch-nodeJS - 代码日志