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

在PostgreSQL和NoSQL数据库之间提供同步,postgresql,denormalization,nosql,Postgresql,Denormalization,Nosql,我有一个具有非常规范化数据的PostgreSQL数据库,所以很多请求会产生很多连接,而我的数据库工作得很慢。我想对PostgreSQL中的数据进行非规范化,并将其存储在NoSQL数据库中,以便进行只读访问。为此,我必须在PostgreSQL和NoSQL之间提供同步—允许的延迟很小。我想考虑不同的方式,所以我可以选择最合适的。 我可以在发生更改时使用模型中的事件,并将它们放入队列中。在这之后,工作人员可以处理事件并向NoSQL添加必要的数据,但我有很多质量不好的遗留代码,我不想对其进行太多更改。此

我有一个具有非常规范化数据的PostgreSQL数据库,所以很多请求会产生很多连接,而我的数据库工作得很慢。我想对PostgreSQL中的数据进行非规范化,并将其存储在NoSQL数据库中,以便进行只读访问。为此,我必须在PostgreSQL和NoSQL之间提供同步—允许的延迟很小。我想考虑不同的方式,所以我可以选择最合适的。

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

对于这样的任务有什么解决方案?

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

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

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

这种方法的一般含义是

2使用PostgreSQL获取有关更改的事件,这是一个非常强大的功能。我找到了两个使用此功能的解决方案:1。使用卡夫卡工具,它可以工作,但不能再开发了。2.使用该工具,它可以工作并具有活跃的社区


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

您可能需要签出。@Dmitri Goldring感谢您的建议。我知道国外的数据包装器,但我想得到关于如何从头到尾实现所有流程的建议。例如,如何使用提供同步的外部数据包装器?我可以使用SQL触发器、ORM事件,但实际上由于有很多遗留问题,我认为更好的解决方案可能是不要更改遗留代码,也可以使用DB复制或二进制日志。您选择了什么nosql来处理postgresql?你想过像Neo4j这样的图形数据库吗?@stackdave,它只取决于你的任务。我需要DB将非规范化数据存储为文档,所以MongoDB非常适合该任务。如果您需要处理彼此之间具有复杂连接的数据,那么Neo4j是您的选择。