Лучшая практика для синхронизации распространенных данных

У меня есть интернет-приложение, которое поддерживает автономный режим, в котором пользователи могут создавать данные, которые будут синхронизироваться с сервером, когда пользователь возвращается в онлайн. Так что из-за этого яиспользуя UUIDs для идентификации в моей базе данных, чтобы отключенные клиенты могли генерировать новые объекты, не опасаясь использования идентификатора, используемого другим клиентом, и т. д. Однако, хотя это прекрасно работает для объектов, принадлежащих этому пользователю, есть объекты, которые совместно используются несколькими пользователями , Например, теги, используемые пользователем, могут быть глобальными, и тамНевозможно, чтобы удаленная база данных могла содержать все возможные теги в юниверсе.

Если автономный пользователь создает объект и добавляет к нему несколько тегов. Позволять'говорят эти теги нене существует на пользователяs локальная база данных, поэтому программное обеспечение генерирует для них UUID. Теперь, когда эти теги синхронизированы, потребуется разрешение, чтобы устранить любое перекрытие. Некоторый способ сопоставить любые существующие теги в удаленной базе данных с локальными версиями.

Одним из способов является использование какого-либо процесса, с помощью которого глобальные объекты разрешаются естественным ключом (имя в случае тега), и его заменяет локальная база данных 's существующий объект с этим из глобальной базы данных. Это может быть грязно, когда есть много соединений с другими объектами. Что-то говорит мне, чтобы этого избежать.

Другой способ справиться с этим - использовать два идентификатора. Один глобальный идентификатор и один локальный идентификатор. Я надеялся, что использование UUID поможет избежать этого, но я продолжаю переходить от одного UUID к двум разделенным идентификаторам. Использование этой опции заставляет меня задуматься,Мы позволили проблеме выйти из-под контроля.

Другой подход состоит в том, чтобы отслеживать все изменения через неиспользуемые объекты. В этом примере объект, которому пользователь присвоил теги. Когда пользователь синхронизирует свои автономные изменения, сервер может заменить свой локальный тег на глобальный. В следующий раз, когда этот клиент синхронизируется с сервером, он обнаруживает изменение в необщем объекте. Когда клиент сносит этот объект, онЯ получу глобальный тег. Программное обеспечение просто сохранит объект без общего доступа, направив его на сервер.с тегом и осиротевшей его локальной версией. Некоторые проблемы, связанные с этим, - это дополнительные обходы для полной синхронизации, а также дополнительные данные в локальной базе данных, которая является просто потерянной. Существуют ли другие проблемы или ошибки, которые могут возникнуть, когда система находится между состояниями синхронизации? (то есть, пытаясь общаться с сервером и отправляя ему локальные UUID для объектов и т. д.).

Другая альтернатива - избегать общих объектов. В моем программном обеспечении это может быть приемлемым ответом. Я'я не делаю много общего между объектами пользователей, но это неЯ имею в видуНЕ будет делать это в будущем. Что означает, что выбор этой опции может парализовать мое программное обеспечение в будущем, если мне понадобится добавить эти типы функций. Есть последствия для этого выбора, и яя не уверен, если яМы полностью изучили их.

Так что я'Я ищу любую лучшую практику, существующие алгоритмы для работы с системой такого типа, рекомендации по выбору и т. д.

Ответы на вопрос(3)

Ваш ответ на вопрос