提供 PostgreSQL 和 NoSQL 数据库之间的同步

Provide sync between PostgreSQL and NoSQL database

我有一个 PostgreSQL 数据库,其中包含非常标准化的数据,因此大量请求会产生大量连接,而我的数据库运行缓慢。我想对来自 PostgreSQL 的数据进行非规范化并将其存储在 NoSQL 数据库中以供只读访问。为此,我必须提供 PostgreSQL 和 NoSQL 之间的同步(允许很小的延迟)。我想考虑不同的方式,所以我可以选择最合适的。

我可以在发生变化时使用来自模型的事件并将它们放入队列中。之后,工作人员可以处理事件并将必要的数据添加到 NoSQL,但我有很多质量很差的遗留代码,我不想对其进行太多更改。另外,我可以对数据进行非规范化并将其放入 PostgreSQL,但不知道这是否是合适的解决方案。

此类任务有哪些解决方案?

我对这个主题进行了研究并且得到了结果。 有几种方法可以解决这个任务。我告诉你3种一般方法。

1) 您可以在您的应用中使用信号(例如 ORM 信号)来获取有关更改的通知。 您应该将其放入队列,如果更改不是很多,则应放入 RabbitMQ,如果更改很多,则应放入 Kafka。对于写得很好的不复杂的应用程序,这是一个简单的解决方案。

如果您有复杂的体系结构和大量遗留问题,那么您应该选择这种方法:

这种方法的一般含义是here

2) 使用 PostgreSQL logical decoding to get events about changes, it's very powerful feature. I found two solution where was used this feature: 1. Use tool bottledwater with Kafka, it works, but not develop any more. 2. Use tool debezium,它有效并且有活跃的社区。

3) 使用 PostgreSQL logical decoding 获取有关更改的事件并编写自己的工具来获取事件。