django - 具有双向复制功能的 Django + PostgreSQL
问题描述
首先请让我介绍一下我的用例:我正在开发 Django 应用程序(使用 Graphene 的 GraphQL API),它在云中运行,但在本地客户的网络中也有本地实例。
例如,云中的一个应用程序和本地网络上的 3 个实例(具有启用 BDR 的 PostgreSQL 服务器的本地 Django 应用程序实例)。如果有网络连接,我们将使用双向复制来获取新数据,因为如果没有连接,我们将使用本地实例。这是用于说明的简化基础架构图。
所以,如果我想使用 BDR,我不能在 ORM 中执行 DELETE 和 UPDATE 操作。我必须为我的实体生成 UUID,每次更改都只是一条新记录,其中包含相同 UUID 的更新数据。所选 UUID 的最新记录是我的有效记录。删除只是另一个标志。到目前为止,一切似乎都很好,当我想使用例如多对多关系时问题就开始了。关系依赖于数据库主键,我必须以某种方式处理删除。您能找到解决此问题的最佳方法吗?我没有什么想法,但我不想做出错误的决定:
- 我可以尝试覆盖 ManyToManyField 以使用我的 UUID 和特殊删除标志。这看起来是个好主意,因为一切都应该像以前一样工作(石墨烯会找到关系等)。但我害怕“看不见”的后果。
- 创建我自己的模型来模拟多对多关系。这是更多的工作,但它应该工作得很好。
您以前是否必须解决类似的问题?是否有某种好的做法,或者它只是在建造一条通往地狱的高速公路(AC/DC 非常酷)?
或者,如果您认为有更好的方法来构建服务架构,我很想听听您的想法。
提前致谢。
解决方案
推荐阅读
- dax - DAX 表达式中的参考页面过滤器 - powerbi
- r - R:如果第三列具有相同的值,如何添加 2 个单独列的值
- r - 如果列中有“封闭”单元格,则将 tibble 单元格的值设置为 1
- python - 删除以另一列的大值为条件的值
- awk - 哪个ns2协议最实用
- android - Android recyclerview 不能在带有粘性标题的低端设备上滚动 - 为什么?
- spring-boot - 如何在运行 spring boot 应用程序的 kubernetes 中使用在 localhost 上运行的服务器的端口
- python - 分别记录 stdout 和 stderr 时截断的输出日志文件
- python - Python从日期时间列中仅减去时间(HH:MM:SS)
- javascript - 如何防止/最小化此 d3 示例的回流?