node.js - 带有 elasticsearch 的 Postgres(保持同步)- nodeJS

标签 node.js postgresql elasticsearch redis synchronization

我想设置 postgres 和 elasticsearch。但是在将数据放入 elasticsearch 之前,我想防止网络或服务器出现故障时数据丢失。阅读本主题后:https://gocardless.com/blog/syncing-postgres-to-elasticsearch-lessons-learned/ .我想出了 3 个解决方案。

  1. 创建一个数据库表 ei: store,并向其中添加任何新的/更新的数据。

    • 在查询期间:将数据插入store
    • 选择新数据:SELECT data FROM store WHERE modified > (:last modified time from elasticsearch)
    • 将"new"数据发送到 elasticsearch
  2. 使用redis 来pub/sub 请求,并让elasticsearch 监听/订阅即将到来的数据。如果elasticsearch坏了,数据会在队列中

  3. 在与 elasticsearch 的交易过程中捕获任何错误并将数据保存到安全的地方(ei:上面提到的 store 表)。然后有一个 cron 作业将这些数据推回。


当然,最简单的事情是直接向elasticsearch插入数据。但这样做可以防止数据在损坏期间存储在安全的地方。 1 在我看来太慢了,不像 23 需要维护错误处理代码。

目前 2 是我的选择。


有没有更好的方法来做到这一点?我想听听您的意见和新的建议

:D

最佳答案

Redis (2) 不可靠。

我决定立即将数据添加到 elasticsearch 并将数据添加到 updates 表。然后在连接到 elasticsearch 客户端后立即运行 sync() 函数(如果集群之前出现故障)+ 每 24 小时运行一次 cron 作业以启动 sync()sync() 所做的就是从 updates A 和 elasticsearch B 中选择最新的数据(时间或 ID)并进行比较如果有记录 A > B。如果是这样,请使用批量 API 插入数据。

希望这有帮助:)

我仍然乐于接受建议和反馈...

关于node.js - 带有 elasticsearch 的 Postgres(保持同步)- nodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667292/

相关文章:

Elasticsearch 。具有重复值的嵌套字段的术语聚合

javascript - Node.js + mongo + express MVC API : how to use controllers?

node.js - Nodemailer 和 ical-generator - 发送日历邀请

django - Docker 不保留 postgres 卷 [django]

node.js - 如何使用 Sequelize 包含多个其他表?

node.js - mongoosastic,无法创建映射

scala - 如何在Spark和Elasticsearch中迭代hadoop MapWritable

javascript - 使用 Chokidar 监视特定的文件扩展名

node.js - 如何在每次页面刷新时验证 session cookie 的完整性,应该如何处理?

postgresql - 通过 EC2 从 sqlalchemy 连接 AWS RDS