Как правильно добавлять / обновлять данные в Firestore в автономном режиме?
Когда мое приложение находится в автономном режиме, и я добавляю или обновляю документ, память увеличивается. Кроме того, показ списков документов занимает больше времени для загрузки. Если я запускаю тот же код, когда устройство подключено к сети, память остается неизменной, а также скорость операций со списками документов.
В настоящее время я делаю сохранения следующим образом:
collectionRef.document(id).set(obj, SetOptions.merge());
Или для пакетирования нескольких записей:
batch.set(docRef1, obj1);
batch.set(docRef2, obj2);
batch.commit();
У меня были прослушиватели onComplete, но в принятом ответе на этот вопрос, похоже, указывается, что прослушиватели в большинстве ситуаций не нужны и что вы все равно не можете дождаться его завершения, когда находитесь в автономном режиме.
В другом вопросе они указывают в коде, что для правильного выполнения онлайн и офлайн сохранения требуется "Снимок": автономная проблема с Firestore vs Firebase. Но я не могу найти где-либо еще указание, будет ли это иметь значение. Я считаю, что моментальные снимки - это то, что вы прикрепляете к документу или запросу, когда хотите получать уведомления об изменениях в нем, а присоединение такого прослушивателя приведет к утечке памяти, если он не будет удален.
Другая часть всего этого - то, как эта медлительность может повлиять на целостность данных. Когда я смотрю в профилировщике в Android Studio, я вижу, что FirestoreWorker может добраться до точки, где он постоянно работает, даже если я ничего не делаю в приложении. Я не просто говорю несколько секунд, больше похоже на минуту. Я не могу найти никакой гарантии заказа записей, когда он находится в автономном режиме. Попытка остановить и перезапустить приложение, похоже, не влияет на медлительность (хотя это приведет к сбросу памяти).
Таким образом, все это приводит к вопросу: как правильно добавлять / обновлять данные в Firestore в автономном режиме, чтобы память приложения не росла неограниченно и не замедлялась?
1 ответ
Облако Firestore использует SQLite
за его механизм сохранения. Поэтому в периодические периоды автономной работы у вас не должно быть проблем с производительностью или долговечностью.
Однако, если вы намереваетесь использовать базу данных Firestore в течение очень длительного периода времени, есть некоторые вещи, о которых вам следует знать. Cloud Firestore не был построен как автономная база данных, это онлайн-база данных, которая продолжает работать, когда вы находитесь в автономном режиме для short
или же longer
периоды времени. В автономном режиме ожидающие записи, которые еще не были синхронизированы с сервером, помещаются в очередь. Если вы выполняете слишком много операций записи, не подключаясь к ним для синхронизации, то очередь будет быстро расти и не будет замедляться только write
операции это также замедлит ваш read
операции.
Поэтому я предлагаю использовать эту базу данных для своих онлайн-возможностей. Как сказал один из инженеров Firebase, и я цитирую: "Невозможно создать медленный запрос в Firestore". Таким образом, производительность достигается благодаря новым возможностям индексирования на сервере, и эти оптимизации не существуют, когда вы не в сети.
Еще одна вещь, если у вас есть много автономных клиентов, которые пытаются записать в один и тот же документ, только последний будет фактически записан на серверы при изменении состояния.
Таким образом, чтобы ответить на ваш вопрос, не существует подходящего способа добавить / обновить данные в Firestore в автономном режиме, чтобы уменьшить использование памяти. Просто зайдите в онлайн и все!