Postgres和ElasticSearch最佳同步方式是什么?

6
我可以选择将ES与我的Postgres DB的最新更改同步:

1- Postgres监听/通知:

我应该创建一个触发器 -> 使用pg_notify -> 并在单独的服务中创建监听器。

2- 异步查询到ES:

我可以在DB更改后异步更新ElasticSearch。例如:

model.save().then(() => {model.saveES() }).catch()

哪个方案会更好地扩展?

PS:我们在生产中尝试了zombodb,但效果不佳,它会拖慢生产速度。


寻找类似于这个的东西 https://github.com/toptal/chewy - user3775217
@user3775217 这对于批量导入会有所帮助,但我不需要那个。我需要PostgresDB和ES中正在发生的实时同步。我们的Postgres(大小约为1TB)变得很慢,有很多定时作业/机器学习分析等。我们所做的就是向DB添加/更新/删除,然后从ES中读取。因此,ES需要实时同步,而那并不能帮助解决问题。清楚吗?(我的英语真的很糟糕:/) - SOufiane Fadil
2个回答

9

6
我建议您考虑https://github.com/debezium/debezium。它支持Postgresql,并实现了其他帖子中提出的更改捕获模型,而不是双重写入模型。
debezium的好处:
  • 低延迟更改流
  • 将更改存储在复制日志中以实现耐久性
  • 仅发出写入事件(创建、更新、删除),可被消费并输入到其他系统中。

UPD.这里有一个简单的github存储库,展示了它的工作原理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接