Что именно делает синхронизация Firestore? - PullRequest
0 голосов
/ 20 июня 2019

https://firebase.google.com/docs/firestore говорит:

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

Я пытаюсь выяснить, из чего состоит эта «синхронизация данных».

https://firebase.google.com/docs/firestore/manage-data/enable-offline говорит:

Когда постоянство включено, Cloud Firestore кэширует каждый документ, полученный от серверной части для автономного доступа.

Обновляет ли Cloud Firestore этот кэш всякий раз, когда происходят изменения в серверной части? Например, если у меня есть определенный документ в моем кэше, делает ли документ обновить (а) автоматически, когда этот документ изменяется в бэкэнде или (б) всякий раз, когда я делаю запрос, который использует этот документ, и я в сети в то время?

UPDATE

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

Представьте себе следующий сценарий:

  • У меня есть смартфон. Для простоты предположим, что смартфон онлайн все время.
  • На этом смартфоне установлено мобильное приложение, содержащее Firestore SDK.
  • Приложение включило кэш Firestore.
  • Кэш содержит, скажем, 1000 документов.

Теперь мой вопрос: если один из этих документов изменяется в облаке (не включен смартфона), при каких условиях Firestore SDK будет обновлять документ в кеше? Будет ли он (а) обновлять документ автоматически, в ближайшее время после изменения в облаке, или (b) обновите документ в следующий раз мобильное приложение выполняет запрос, использующий документ?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Если у вас включен локальный кэш, Firestore автоматически сохраняет все полученные документы в этом локальном кеше.

Это происходит только тогда, когда ваше приложение запрашивает документы, вызывая get() или onSnapshot.Firestore не запрашивает автоматически документы от вашего имени.Поэтому, если ваше приложение не запрашивает документ, кэш не будет обновляться.

0 голосов
/ 20 июня 2019

Оба выделенных абзаца являются, на мой взгляд, прямыми объяснениями и отвечают на ваши вопросы:

Обновляет ли Firestore этот кэш всякий раз, когда происходят изменения в серверной части?

Да, если вы находитесь в автономном режиме и некоторые документы изменены, после того как вы вернетесь в сеть, вы получите все измененные документы и наоборот, если вы измените некоторые документы локально (в своем кэше), когда вы вернетесь в сеть, все измененные документы отправляются на серверы Firebase.

Если у вас есть запрос, который возвращает 10 документов, это означает, что вы синхронизированы с 10 документами, что в основном означает, что если из этих 10 документов будет изменен, ваш слушатель будет запущен только для этого изменения.

обновляет документ (а) автоматически при изменении этого документа в серверной части

Да, прежде всего в вашем кеше, и как только вы вернетесь в сеть, также на серверах Firebase.

всякий раз, когда я делаю запрос, который использует этот документ, и я в это время нахожусь в сети?

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

Изменить:

если один из этих документов изменяется в облаке (не на смартфоне), при каких условиях Firestore SDK будет обновлять документ в кеше? Будет ли он (а) обновлять документ автоматически, вскоре после изменения в облаке, или (б) обновлять документ в следующий раз, когда мобильное приложение выполнит запрос, использующий документ?

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

обновить документ в следующий раз, когда мобильное приложение выполнит запрос, использующий документ?

Неправильно, так как вы находитесь в сети и синхронизированы с документами, слушатель срабатывает мгновенно.

Edit2:

Короче говоря, слушатель вызывается каждый раз, когда происходит изменение в документе. «В следующий раз, когда приложение выполнит запрос» - это неправильное предложение, потому что, когда вы создаете запрос и присоединяете слушателя, вы всегда синхронизированы с базой данных, и когда документ изменяется, вы немедленно получаете уведомление. Это не , как документы в базе данных чередуются, и когда я запрашиваю (в какой-то момент времени), я получаю изменения, нет, вы всегда будете уведомлены о них. В этом прелесть базы данных в реальном времени, которую нужно уведомлять о происходящих изменениях :)

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