一尘不染

在与数据库的连接上同步Elasticsearch-NodeJS

elasticsearch

目的 :将elasticsearch 与postgres数据库同步
为什么 :有时newtwork或集群/服务器中断,因此应记录将来的更新

本文https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建议我应该创建一个单独的表updates来同步elasticsearch的表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

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

问题

  1. syncProcess跑之前export default client?同步时,我不希望收到任何请求…

  2. syncProcess不管我有多少次,它应该只运行一次(因为它已缓存/未导出)import elasticConnect.js。正确?

  3. 将方法与updates表一起使用,而不是仅从父/源表中选择数据,有什么好处?

  4. 文章的评论中说:“ 不要使用时间戳来比较新数据! ”。因为数据库正在阻塞,所以应该没事吧?


阅读 362

收藏
2020-06-22

共1个答案

一尘不染

对于1:因为这是不syncProcess存在在导出客户端时将要运行的保证。
对于2:有了上述问题中与我联系的解决方案,这将得到解决。

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

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

2020-06-22