Postgres与elasticsearch(保持同步) - nodeJS

时间:2016-09-23 18:23:55

标签: 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)
    • 将“新”数据发送到elasticsearch
  2. 将redis用于pub/sub个请求,并使elasticsearch监听/订阅即将发布的数据。如果elasticsearch中断,则数据将在队列中

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

  4. 当然最简单的方法是立即将数据插入elasticsearch。但这样做可以防止数据在损坏期间存储在安全的地方。与1不同,我认为2太慢了。并且3需要保留错误处理代码。

    现在2是我的选择。

    有更好的方法吗?我想听听您的意见和新的建议

    :D

1 个答案:

答案 0 :(得分:0)

Redis(2)不可靠。

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

希望这会有所帮助:)

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