Отслеживание удаленных записей между мобильной локальной базой данных и дополнительной облачной базой данных - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над мобильным приложением, в котором основной функцией является выполнение пользователем множества задач CRUD (создание, чтение, обновление и удаление).

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

Это приложение должно работать как в автономном, так и в онлайн-режиме.И пользователь должен иметь возможность использовать несколько устройств, содержащих одни и те же данные.

В настоящее время во всех моих таблицах sql у меня есть 3 дополнительных столбца, которые отслеживают, какие записи в базе данных синхронизируются: createAt (datetime),updatedAt (datetime) и синхронизированный (логический).Благодаря этому я могу отслеживать, какие записи являются самыми последними, и соответственно обновлять либо локальную, либо облачную базу данных.

Я использую Cloud Firestore в качестве облака, и использую его автономные возможности:не приемлемый вариант в моем случае.

Мой вопрос;Какое решение будет наилучшим при отслеживании удаленных записей до тех пор, пока приложение не сможет синхронизироваться с облаком?

Одной из идей для решения этой проблемы является наличие таблицы, содержащей все идентификаторыудаленные записи вместе с таблицей, к которой он принадлежит, а затем, когда приложение может синхронизироваться;удалите эти записи как в локальной базе данных (на всех устройствах), так и в облачной базе данных.Проблема, с которой я столкнулся в этом решении, состоит в том, что эта таблица «удаления» быстро станет огромной, и удаление записей из этой таблицы будет проблемой из-за необходимости обновления всех пользовательских устройств перед удалением ив случае, когда пользователь отказался от одного из своих устройств, это означало бы, что устройство никогда не будет синхронизировано, в результате чего записи не будут удалены из таблицы «удаление».

Что бы вы посоветовалибыть для надежного способа отслеживания удаленных записей?

1 Ответ

0 голосов
/ 27 февраля 2019

Я не думаю, что есть решение, которое удовлетворяет обеим этим целям:

  1. Не хранить удаленные элементы в базе данных вечно
  2. Убедитесь, что удаления синхронизируются между всеми устройстваминавсегда

Так что вам придется решить, от кого отказаться.Ваша идея удовлетворяет 2, а не 1. Решение, которое удовлетворяет 1, но не 2, состоит в удалении записей об удалении через некоторое время, возможно, шесть месяцев.Вариация может заключаться в том, что когда запись удаляется, а не фактически удаляется, просто пометьте ее как удаленную (а также дату, когда она была удалена) и, если применимо, удалите любые большие фрагменты данных из записи.По истечении льготного периода запись может быть фактически удалена.Недостатком является то, что если вывести устройство из строя, оно может восстановить ранее удаленные записи.

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