Эффективно обновляйте данные в пожарном хранилище и предотвращайте множество операций записи - PullRequest
0 голосов
/ 14 июля 2020

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

Я бы хотел, чтобы, если пользователь редактирует только один раздел тогда это обновляется только в firestore.

Мой код

    await firestoreInstance
        .collection("users")
        .document(firebaseUser.uid)
        .updateData({
      "images": _imagesUrl,
      "name": firstNameController.text,
      "biography": biographyController.text,
    });

1 Ответ

2 голосов
/ 14 июля 2020

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

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

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

Причина в том, что Firebase взимает плату за (в этом сценарии):

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

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

...