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

标签 node.js postgresql elasticsearch synchronization elasticsearch.js

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

本文https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建议我应该创建一个单独的表 updates 来同步 elasticsearch 的 id,允许选择自上次记录(在 elasticsearch 中)以来的新数据(来自数据库)。所以我想如果我可以记录 elasticsearch 的失败和成功连接会怎么样:如果 client ponged 成功返回(返回 promise ),我可以启动一个功能来与我的数据库同步记录.

这是我的 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. 文章的评论说“不要使用时间戳来比较新数据!”。嗯……为什么?应该没问题,因为数据库正在阻塞,对吧?

最佳答案

对于 1:您不能保证 syncProcess 将在客户端导出时运行。相反,你应该做类似 this answer 中的事情并导出一个 promise 。

对于 2:使用我在上述问题中链接的解决方案,这将得到解决。

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

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

关于node.js - 在与数据库的连接上同步 elasticsearch - nodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757377/

相关文章:

linux - 厌倦了在每次重启后创建/运行/postgresql 并设置读取和执行写入

elasticsearch - 压缩到 Elasticsearch 索引

elasticsearch - Elasticsearch集群中所有节点的滚动节点重启

node.js - 在 Linux 终端中看不到 console.log()

mysql - 为什么我的 sql 池连接突然关闭

database - 如何删除匹配模式的postgresql数据库?

indexing - More_like_this elasticsearch如何工作(进入整个索引)

node.js - Node.js 能否完全替代 Apache 或 NGINX 等解决方案?

javascript - 如何按顺序和限制计算多个数组的数组元素计数之和?

linux - linux下如何重建热备postgresql数据库