Во-первых, позвольте мне представить мой пример использования: я работаю над приложением Django (GraphQL API с использованием Graphene), которое работает в облаке, но также имеет свои локальные экземпляры в локальных сетях клиентов.
Например, одно приложение в облаке и 3 экземпляра (локальный экземпляр приложения Django с сервером PostgreSQL с включенным BDR) в локальных сетях.Если есть сетевое соединение, мы используем двунаправленную репликацию для получения свежих данных, потому что, если нет соединения, мы используем локальные экземпляры.Вот упрощенная схема инфраструктуры для иллюстрации.
Итак, если я хочу использовать BDR, я не могу выполнять операции DELETE и UPDATE вОРМ.Я должен сгенерировать UUID для моих сущностей, и каждое изменение - это просто новая запись с обновленными данными для того же UUID.Последняя запись для выбранного UUID - моя действительная запись.Удаление это просто еще один флаг.До сих пор, кажется, все хорошо, проблема начинается, когда я хочу использовать, например, отношения многие ко многим.Отношения зависят от первичных ключей базы данных, и я должен как-то справиться с удалением.Можете ли вы найти лучший способ решить эту проблему?У меня мало идей, но я не хочу принимать неверное решение:
- Я могу попытаться переопределить ManyToManyField для работы с моими UUID и специальным флагом удаления.Это похоже на хорошую идею, потому что все должно работать как прежде (Графен найдет отношения и т. Д.).Но я боюсь «невидимых» последствий.
- Создайте свои собственные модели для имитации отношений ManyToMany.Это гораздо больше работы, но она должна работать просто отлично.
Вам приходилось решать подобную проблему раньше?Есть ли какая-то хорошая практика или это просто строительство шоссе в ад (AC / DC довольно круто)?
Или, если вы думаете, что есть лучший способ построить сервисную архитектуру, я бы с удовольствиемуслышать ваши идеи.
Заранее спасибо.