在与database-nodeJS的连接上同步elasticsearch

目标 :将elasticsearch与postgres数据库同步
为什么 :有时候新networking或群集/服务器会中断,以便将来的更新应该被logging

本文https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.htmlbuild议我应该创build一个单独的表updates ,它将同步elasticsearch的id ,允许从上一条logging(在elasticsearch中)select新的数据(从数据库)。 所以我想如果我可以loggingelasticsearch的失败和成功的连接:如果client成功返回(返回一个承诺),我可以启动一个函数来同步logging与我的数据库。

这是我的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是正确的),因为我知道集群正在运行。

问题

  1. syncProcess会在export default client之前运行吗? 我不想在同步时进入任何请求…

  2. syncProcess只能运行一次(因为它被caching/不导出),无论我import多less次elasticConnect.js 。 正确?

  3. 使用updates表的方法是否有任何优势,而不是从父/源表中select数据?

  4. 文章的评论说:“ 不要使用时间戳来比较新的数据! ”呃…为什么? 这应该是因为数据库阻塞,对不对?

对于1:因为您不能保证syncProcess在客户端导出时已经运行。 相反,你应该做这样的回答,并出口一个承诺。

对于2:在上面的问题中,我将链接到解决scheme,这将被照顾。

对于3:更新表也会捕获logging删除,而只是从数据库中select不会,因为你不知道哪些logging已经消失。

对于4:你链接到的文章后的第二个评论提供了答案(提示:时间戳不严格单调)。