我想设置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)
将redis用于pub/sub
个请求,并使elasticsearch监听/订阅即将发布的数据。如果elasticsearch中断,则数据将在队列中
将事务中的任何错误捕获到elasticsearch并将数据保存到安全的地方(上面提到的ei:store
表)。然后有一个cron工作推回这些数据。
当然最简单的方法是立即将数据插入elasticsearch。但这样做可以防止数据在损坏期间存储在安全的地方。与1
不同,我认为2
太慢了。并且3
需要保留错误处理代码。
现在2
是我的选择。
有更好的方法吗?我想听听您的意见和新的建议
:D
答案 0 :(得分:0)
Redis(2)不可靠。
我决定立即将数据添加到elasticsearch并将数据添加到updates
表。然后在连接到elasticsearch客户端之后直接运行sync()
函数(如果之前集群已关闭)+每24小时运行一次cron作业以启动sync()
。所有sync()
都会从updates
A 和elasticsearch B 中选择最新数据(时间或ID)并比较是否有记录{{1} }。如果是这样,请使用批量API插入数据。
希望这会有所帮助:)
我仍然接受建议和反馈......