【问题标题】:Provide sync between PostgreSQL and NoSQL database提供 PostgreSQL 和 NoSQL 数据库之间的同步
【发布时间】:2017-07-31 23:11:46
【问题描述】:

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

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

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

【问题讨论】:

  • 您可能想查看foreign data wrappers。
  • @Dmitrii Goldring 感谢您的建议。我了解外国数据包装器,但我想获得有关如何从头到尾实施所有流程的建议。例如,如何使用提供同步的外部数据包装器?我可以使用 SQL 触发器、ORM 事件,但实际上由于有很多遗留问题,我认为更好的解决方案可能是不更改遗留代码,并且可以使用数据库复制或二进制日志。

标签: postgresql denormalization nosql


【解决方案1】:

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

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

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

这种方法的一般含义是here

2) 使用 PostgreSQL logical decoding 获取有关更改的事件,这是一个非常强大的功能。我找到了两个使用此功能的解决方案:1. 将工具 bottledwater 与 Kafka 一起使用,它可以工作,但不再开发。 2. 使用工具debezium,它可以工作并且有活跃的社区。​​p>

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

【讨论】:

  • 你选择了什么 nosql 来使用 postgresql?你有想过像 Neo4j 这样的图形数据库吗?
  • @stackdave,这仅取决于您的任务。我需要 DB 将非规范化数据存储为文档,因此 MongoDB 非常适合该任务。如果您需要处理相互之间有复杂联系的数据,那么 Neo4j 是您的选择。
猜你喜欢
  • 2013-10-31
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多