Предотвращение одновременных действий с двух устройств в одной коллекции - PullRequest
0 голосов
/ 16 апреля 2020

Я использую Firestore и Flutter (Dart). Этот вопрос более концептуален, чем что-либо еще.

Структура базы данных - это коллекция Users, содержащая коллекцию от A до G (принадлежит пользователю).

На том же уровне, что и от A до Коллекция G (int) lastUpdated поле. Когда устройство вставляет, обновляет или удаляет в пределах своего фрагмента Firestore, устройство генерирует временную метку и сохраняет ее в lastUpdated как на Firestore, так и на устройстве. Если пользователь открывает другое устройство с более старой отметкой времени, он сравнивается с сервером, чтобы определить, что ему нужно извлечь данные, а не извлекать данные sh.

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

Но, если кто-то совершает действие на двух устройствах одновременно (или до завершения действий предыдущего устройства), алгоритмы пересекаются, и это либо заканчивается во всех удаляемых или повторяющихся данных.

Я думал о добавлении поля (bool) syncInProgress в Firestore, которое становится true при подключении и false после завершения, но если у кого-то есть устройство отключается во время процесса, он может застрять в true и эффективно предотвратить все будущие взаимодействия с БД (без вмешательства администратора).

Моя другая мысль заключалась в том, что если устройство получит уведомление о том, что syncInProgress верно (и поэтому им нужно подождать до синхронизации c), им также может быть представлена ​​кнопка для более поездка, которая вручную установит syncInProgress обратно в false.

Все это звучит слишком сложно, и обычно, когда это происходит, я что-то обдумываю, и есть лучший способ. Предложения

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