#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: здесь . Вы можете «пометить» его и настроить уведомления для получения обновлений о них. Кроме того, вы можете создать новый, если это необходимо.