Количество прочитанных данных Firestore не соответствует количеству запросов документов

#angular #typescript #firebase #google-cloud-firestore

#angular #typescript #firebase #google-cloud-firestore

Вопрос:

Я столкнулся с некоторой проблемой при попытке вычислить и рассчитать количество прочитанных в firestore. Количество прочитанных в firestore всегда увеличивается с очень высокой скоростью (приращение на 100 отсчетов при каждой перезагрузке страницы), хотя документов пользователей всего около 15. Даже когда я не перезагружаю страницу, количество прочитанных в firestore увеличивается само по себе, связано ли это с поведением подписки, которое время от времени приводит к обновлению действия чтения данных? (Я прочитал, что некоторые статьи рекомендуют использовать «один раз», если пользователь хочет извлечь данные только один раз).

Ниже приведен фрагмент кода (ts):

   // All buddy users from Firebase
  private usersCollection: AngularFirestoreCollection<Profile>;
  users: Observable<Profile[]>;
  usersFirebase: Profile[] = [];

getUserDataFromFirebase() {
  this.isImageLoading = false;
  this.users.subscribe(async results => {
      var ref;
      for(let result of results) {
        if(result.imageName) {
          ref = this.store.ref('images/'   result.userId   '/profiles/'   result.imageName);
        } else {
          // Get default image is image not existing
          ref = this.store.ref('images/ironman.jpg');
        }
  
        await ref.getDownloadURL().toPromise().then(urlString => {
          result.profileURL = urlString;
          // Change availibility date from timestamp to date format
          try {
            result.availability = this.datePipe.transform(result.availability.toDate(), 'yyyy-MM-dd');
          } catch (error) {}
          result.flip = 'inactive';


            if(result.identity == 'Tenant')
            {
              this.usersFirebase.push(result);
            }
            return new Promise((resolve, reject) => {
                resolve();
              })
        });
      }
      console.log(this.usersFirebase);
    });
  }
  

Как работает счетчик чтения firestore, зависит ли увеличение количества от запросов к документам, будет ли он продолжать запрашивать себя через определенное время?
Количество прочитанных в Firestore увеличивается больше, чем количество документов пользователей

Комментарии:

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

Ответ №1:

Количество считываний зависит от количества извлеченных документов.

Давайте установим эти 4 сценария:

  • Набор из 10 пользователей, вы запускаете collection("users").get() вызов: вы получите обратно 10 документов сотрудника и будете платить за 10 считываний.
  • При наборе из 10 000 пользователей вы запускаете collection("users").get() вызов: вы получите обратно 10 000 пользователей и будете платить за 10 000 считываний.
  • При наборе из 10 000 сотрудников вы выполняете collection("users").get().limit(10) вызов: вы получите обратно 10 пользователей и будете платить за 10 считываний.
  • Коллекция из 10 000 пользователей, 15 из которых с именем «Карл», и вы запускаете collection("users").where("first_name", "==", "Carl") вызов, вы получите обратно 4 пользователя и будете платить за 15 чтений.

С другой стороны, если вы прослушиваете всю коллекцию users (без предложений where() или .OrderBy()) и у вас есть активный прослушиватель onSnapshot(), то с вас будет взиматься плата за операцию чтения документа каждый раз, когда новый документ добавляется, изменяется или удаляется в коллекции users .

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

Наконец, следует иметь в виду, что операции чтения в вашем отчете могут не совпадать с использованием счетов и квот. В общедоступном трекере проблем есть запросы функций, связанные с этим запросом — читается в Firestore: здесь . Вы можете «пометить» его и настроить уведомления для получения обновлений о них. Кроме того, вы можете создать новый, если это необходимо.