首页 > 解决方案 > 具有双向复制功能的 Django + PostgreSQL

问题描述

首先请让我介绍一下我的用例:我正在开发 Django 应用程序(使用 Graphene 的 GraphQL API),它在云中运行,但在本地客户的网络中也有本地实例。

例如,云中的一个应用程序和本地网络上的 3 个实例(具有启用 BDR 的 PostgreSQL 服务器的本地 Django 应用程序实例)。如果有网络连接,我们将使用双向复制来获取新数据,因为如果没有连接,我们将使用本地实例。这是用于说明的简化基础架构图。

架构示例

所以,如果我想使用 BDR,我不能在 ORM 中执行 DELETE 和 UPDATE 操作。我必须为我的实体生成 UUID,每次更改都只是一条新记录,其中包含相同 UUID 的更新数据。所选 UUID 的最新记录是我的有效记录。删除只是另一个标志。到目前为止,一切似乎都很好,当我想使用例如多对多关系时问题就开始了。关系依赖于数据库主键,我必须以某种方式处理删除。您能找到解决此问题的最佳方法吗?我没有什么想法,但我不想做出错误的决定:

  1. 我可以尝试覆盖 ManyToManyField 以使用我的 UUID 和特殊删除标志。这看起来是个好主意,因为一切都应该像以前一样工作(石墨烯会找到关系等)。但我害怕“看不见”的后果。
  2. 创建我自己的模型来模拟多对多关系。这是更多的工作,但它应该工作得很好。

您以前是否必须解决类似的问题?是否有某种好的做法,或者它只是在建造一条通往地狱的高速公路(AC/DC 非常酷)?

或者,如果您认为有更好的方法来构建服务架构,我很想听听您的想法。

提前致谢。

标签: djangopostgresqldjango-modelsreplicationpostgresql-bdr

解决方案


推荐阅读