0

在此处输入图像描述

我在 Django 中使用 Graphene 作为 GraphQL 服务器。我在 Django 中设置了一个 MySQL 副本。我的设置很简单。读取请求 -> 副本。写请求 -> 源

突变以下一种方式起作用:它们修改数据,然后返回修改后的/新数据。Graphene 修改 Source 中的数据并立即从 Replica 中选择它们。问题是更新的数据没有立即出现在副本数据库中(因为复制延迟)。结果,一些突变根本不起作用。

我有一个解决方案 - 在每个突变中指定 Django 数据库。还没试过。但是这个项目很大,这需要对代码库进行大量更改。

我正在寻找更简单的解决方案。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'root',
        'HOST': MYSQL_HOST,
        'PORT': '3306',
    },
    'read_replica': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name_replica',
        'USER': 'root',
        'HOST': MYSQL_HOST_REPLICA,
        'PORT': '3306',
    }
}
DATABASE_ROUTERS = ['app.db_router.DatabaseRouter']

class DatabaseRouter:
    def db_for_read(self, model, **hints):
        return 'read_replica'

    def db_for_write(self, model, **hints):
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        return True
4

0 回答 0