Насколько надежным является Firestore как автономный механизм сохранения устойчивости?

В настоящее время я использую Firebase Firestore в качестве основного бэкэнда, который извлекает данные из различных источников. Я также использую Android Room для своего мобильного бэкенда. Когда телефон получает данные, они сохраняются в базе данных Room, если пользователь не будет снова подключен к сети в течение нескольких дней или даже недель.

Посмотрев файлы устройства, я вижу, что firestore сохраняет данные в файлах в каталоге /data/data/<your-app>/databases.

enter image description here

Файл выглядит примерно так enter image description here

Я прочитал документацию о сохранении в автономном режиме на пожарном складе, и нет никаких указаний на то, насколько надежной является постоянство в автономном режиме. В нем упоминается, что данные кэшируются, но не в течение какого времени. Мой вопрос заключается в том, какова долговечность Firestore в автономном режиме. Можно ли порекомендовать использовать его вместо полноценной локальной БД для хранения данных, которые могут не синхронизироваться в течение длительных периодов времени (дней, недель)?

Кажется, он уже хорошо обрабатывает данные синхронизации после восстановления соединения. Я просто обеспокоен тем, что после некоторого момента этот файл может быть удален системой, и пользователь потеряет все.

Ответ 1

В Android (начиная с этой записи) Firestore использует SQLite как механизм сохранения. Поэтому для периодических периодов автономной работы у вас не должно быть проблем с производительностью или долговечностью.

Однако, если вы собираетесь быть в автономном режиме в течение нескольких дней или недель (как вы сказали), вы должны знать о следующих вещах:

Производительность

Поскольку Cloud Firestore предназначен для использования в основном онлайн, ожидающие записи, которые еще не синхронизированы с сервером, хранятся в очереди. Если вы делаете много незавершенных операций записи, не выходя из сети, чтобы разрешить их, эта очередь будет расти, и это замедлит общую производительность чтения/записи. Большинство гарантий производительности Cloud Firestore исходят от индексации и репликации на бэкэнд, но большинство этих оптимизаций не существует, когда вы работаете только в автономном режиме.

Конфликты

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

Функции

Большинство функций Firestore работают в автономном режиме с одним основным исключением: транзакциями. Транзакции могут выполняться только в режиме онлайн. Поэтому, если ваше приложение использует транзакции, оно не будет работать в автономном режиме без специальной обработки.

Ответ 2

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

Я рекомендую вам не использовать Cloud Firestore в качестве автономной базы данных. Он действительно разработан как онлайн-база данных в реальном времени, которая может работать в течение коротких или промежуточных периодов отключения.

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