我想设置 postgres 和 elasticsearch。但是在将数据放入 elasticsearch 之前,我想防止网络或服务器出现故障时数据丢失。阅读本主题后:https://gocardless.com/blog/syncing-postgres-to-elasticsearch-lessons-learned/ .我想出了 3 个解决方案。
创建一个数据库表 ei:
store
,并向其中添加任何新的/更新的数据。- 在查询期间:将数据插入
store
。 - 选择新数据:
SELECT data FROM store WHERE modified > (:last modified time from elasticsearch)
- 将"new"数据发送到 elasticsearch
- 在查询期间:将数据插入
使用redis 来
pub/sub
请求,并让elasticsearch 监听/订阅即将到来的数据。如果elasticsearch坏了,数据会在队列中在与 elasticsearch 的交易过程中捕获任何错误并将数据保存到安全的地方(ei:上面提到的
store
表)。然后有一个 cron 作业将这些数据推回。
当然,最简单的事情是直接向elasticsearch插入数据。但这样做可以防止数据在损坏期间存储在安全的地方。 1
在我看来太慢了,不像 2
。 3
需要维护错误处理代码。
目前 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/