具有双向复制功能的Django + PostgreSQL

时间:2018-12-06 14:12:47

标签: django postgresql django-models replication postgresql-bdr

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

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

Architecture example

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

  1. 我可以尝试覆盖ManyToManyField以使用我的UUID和特殊删除标志。看起来这是个不错的主意,因为所有内容都应该像以前一样工作(石墨烯会找到这些关系等)。但是我担心会出现“隐形”后果。
  2. 创建我自己的模型来模拟ManyToMany关系。还有很多工作,但应该可以。

您之前必须解决类似的问题吗?是否有某种良好的做法,或者只是在通往地狱的高速公路上建造(AC / DC很酷)?

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

谢谢。

0 个答案:

没有答案