Django で GraphQL サーバーとして Graphene を使用しています。Django で MySQL レプリカをセットアップしました。私の設定はとてもシンプルです。読み取り要求 -> レプリカ。書き込みリクエスト -> ソース
ミューテーションは次のように機能します。ミューテーションはデータを変更し、変更されたデータまたは新しいデータを返します。グラフェンはソースのデータを変更し、すぐにレプリカからそれらを選択します。問題は、更新されたデータがレプリカ DB にすぐに表示されないことです (レプリケーションの遅延のため)。その結果、一部の突然変異は単純に機能しません。
私には解決策があります-すべての突然変異で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