我在 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