在与数据库连接时同步elasticsearch - nodeJS

时间:2016-09-28 20:48:17

标签: node.js postgresql elasticsearch synchronization elasticsearch.js

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

问题

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

  2. import应该只运行一次(因为它已被缓存/未导出),无论我elasticConnect.js updates多少次。正确的吗?

  3. 使用{{1}}表的方法是否有任何优势,而不是仅从父/源表中选择数据?

  4. 文章'评论说" 不要使用时间戳来比较新数据!"。嗯......为什么?它应该没问题,因为数据库是阻塞的,对吗?

1 个答案:

答案 0 :(得分:1)

对于1:因为它不保证在客户端导出时syncProcess将运行。相反,你应该在this answer中做一些事情,然后输出一个承诺。

For 2:根据我在上述问题中链接的解决方案,这将得到解决。

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

For 4:你链接的文章之后的第二条评论提供了答案(提示:时间戳不是严格单调的)。