Django + PostgreSQL с двунаправленной репликацией - PullRequest
0 голосов
/ 06 декабря 2018

Во-первых, позвольте мне представить мой пример использования: я работаю над приложением Django (GraphQL API с использованием Graphene), которое работает в облаке, но также имеет свои локальные экземпляры в локальных сетях клиентов.

Например, одно приложение в облаке и 3 экземпляра (локальный экземпляр приложения Django с сервером PostgreSQL с включенным BDR) в локальных сетях.Если есть сетевое соединение, мы используем двунаправленную репликацию для получения свежих данных, потому что, если нет соединения, мы используем локальные экземпляры.Вот упрощенная схема инфраструктуры для иллюстрации.

Architecture example

Итак, если я хочу использовать BDR, я не могу выполнять операции DELETE и UPDATE вОРМ.Я должен сгенерировать UUID для моих сущностей, и каждое изменение - это просто новая запись с обновленными данными для того же UUID.Последняя запись для выбранного UUID - моя действительная запись.Удаление это просто еще один флаг.До сих пор, кажется, все хорошо, проблема начинается, когда я хочу использовать, например, отношения многие ко многим.Отношения зависят от первичных ключей базы данных, и я должен как-то справиться с удалением.Можете ли вы найти лучший способ решить эту проблему?У меня мало идей, но я не хочу принимать неверное решение:

  1. Я могу попытаться переопределить ManyToManyField для работы с моими UUID и специальным флагом удаления.Это похоже на хорошую идею, потому что все должно работать как прежде (Графен найдет отношения и т. Д.).Но я боюсь «невидимых» последствий.
  2. Создайте свои собственные модели для имитации отношений ManyToMany.Это гораздо больше работы, но она должна работать просто отлично.

Вам приходилось решать подобную проблему раньше?Есть ли какая-то хорошая практика или это просто строительство шоссе в ад (AC / DC довольно круто)?

Или, если вы думаете, что есть лучший способ построить сервисную архитектуру, я бы с удовольствиемуслышать ваши идеи.

Заранее спасибо.

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