Postgresql 使用事务来确保elasticsearch和postgres数据同步是一个好主意吗?
我正在考虑使用postgres ORM中的钩子在postgres和elasticsearch之间同步数据。这是一个实际的方法吗?或者这会不会太贵?您一定在谈论触发器。诚实的回答是,这在很大程度上取决于你的写作量 如果您处于恒定的写负载下,这可能是个坏主意。ES希望在一个大范围内获得大量数据。通常,您使用ES作为其他一些数据库(如Postgres)的索引,您可以接受ES稍微过时的情况。过去有一种叫做rivers的ES技术来帮助解决这个问题;我现在明白了 我想说的是,未来你有几个选择:Postgresql 使用事务来确保elasticsearch和postgres数据同步是一个好主意吗?,postgresql,Postgresql,我正在考虑使用postgres ORM中的钩子在postgres和elasticsearch之间同步数据。这是一个实际的方法吗?或者这会不会太贵?您一定在谈论触发器。诚实的回答是,这在很大程度上取决于你的写作量 如果您处于恒定的写负载下,这可能是个坏主意。ES希望在一个大范围内获得大量数据。通常,您使用ES作为其他一些数据库(如Postgres)的索引,您可以接受ES稍微过时的情况。过去有一种叫做rivers的ES技术来帮助解决这个问题;我现在明白了 我想说的是,未来你有几个选择: 如果写入量
- 如果写入量不大,可以直接从应用程序写入,也可以使用触发器
- 如果您的写容量非常大,可以采用事件源方法或批量更新(或者两者都做;这称为“lambda架构”,在本书中有详细描述)
事件源模型也有类似的优势,只是提升了一个级别:如果我写入广播频道,那么我可以假设,如果频道是持久的,如果消息到达那里,那么它最终将被两个数据库加载,等等。但这使人们更容易相信这两个系统最终是一致的,对于分布式系统来说,这通常比“完美”一致性更有用(如果您有两个服务,您可能有一个分布式系统)。谢谢您的精彩回答,我将进一步研究您的建议。我正在考虑在应用程序端使用ORM中的after create钩子将消息发送到任务队列,然后使用lambda函数在elasticsearch上创建实际条目。但事件源模型似乎是一个更好的解决方案。@user3791980您在评论中描述的方法也是一个非常好的方法。