Django Реплика данных сохранить во многих базах данных - PullRequest
0 голосов
/ 24 января 2020

Из django документации, возможно создать реплику из базы данных и определить, куда она будет писать или читать. (django несколько баз данных ).

Затем он написал код для него, настроив мой DATABASE как:

DATABASES = {
    'default': {
        'NAME': 'my_write_database',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'writedatabase',
    },
    'replica': {
        'NAME': 'replica',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'readdatabase',
    },
}

И создайте маршрутизатор :

class ReplicaDatabaseWriteRead(object):

    route_app_labels = {..all_possible_applications}

    def db_for_read(self, model, **hints):
        return 'replica' # O just wanna read from 'replica'

    def db_for_write(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'default' # I wanna write in default and 'reflect' to 'replica'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        db_list = (..all_possible_apps)
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return None

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

Но это не работает правильно. Когда я пишу, он просто пишет в default, не отражая в replica. Затем, когда я читаю replica, значения не выходят.

Разве он не должен был записать в default и повторить значение в replica? Я использую django -rest-framework Этот код очень похож на документацию, я не знаю, что не так. Или я не понимаю django документацию?

1 Ответ

1 голос
/ 25 января 2020

Django не решает проблему репликации для вас.

Обычный подход для репликации - одна база данных для запись с несколькими репликами для чтения . Репликация выполняется на уровне базы данных (не django), т. Е. База данных настроена на запись своего журнала транзакций, чтение-репликаций syn c этого журнала и его воспроизведение.

Django множественная база данных конфигурация позволяет указывать разные URL базы данных для чтения и записи и / или указывать разные базы данных для разных приложений или даже таблиц - что больше касается кластеризации баз данных , а не репликация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...