Насколько надежным является 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 в качестве автономной базы данных. Он действительно разработан как онлайн-база данных в реальном времени, которая может работать в течение коротких или промежуточных периодов отключения.
В автономном режиме он будет хранить очередь всех ваших операций записи. По мере роста этой очереди локальные операции и запуск приложений будут замедляться. Но вы должны знать, что эти операции будут продолжаться, даже если вы перезагрузите устройство. Вы не потеряете никаких данных.