0

ここに画像の説明を入力

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
4

0 に答える 0