Наиболее эффективный подход к подсчету документов в одной или нескольких коллекциях Firestore

#firebase #google-cloud-firestore #google-cloud-functions

#firebase #google-облако-firestore #google-cloud-функции

Вопрос:

Я разрабатываю приложение для доставки, я хотел бы получить подсчеты для анализа администратором (количество заказов, количество заказов, оплаченных visa, и т. Д.). Я попытался прочитать все документы и получить количество снимков, но понял, что это будет стоить мне много чтений, и если набор данных большой, это замедлит работу моего приложения. Итак, я создал коллекцию под названием counts, и я создал облачную функцию для прослушивания создания документа и увеличения поля count в документе пользователя в коллекции counts, она работает отлично, но я хотел бы знать, будет ли это стоить мне целого состояния и есть ли лучшее решение. примечание: я прослушаю более 5 коллекций

вот моя функция:

 const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

    var firestore = admin.firestore();
 // Listens for any document created in the users collection
exports.createUser = functions.firestore
    .document('users/{userId}')
    .onCreate((snap, context) => {
 firestore.collection('counts').doc('users').update({ count: admin.firestore.FieldValue.increment(1) })
return 'done';
});
 

Ответ №1:

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

Это действительно одно из лучших решений для ваших требований. Обратите внимание, что если частота записи в «основные коллекции» (т. Е. Более 5 коллекций) настолько высока, что документ счетчика может обновляться чаще одного раза в секунду, вы можете использовать набор распределенных счетчиков.

Я хотел бы знать, будет ли это стоить мне целого состояния

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

Если вы читаете эти счетчики раз в год, может оказаться более доступным запросить все документы из 5 коллекций. Но если вы читаете это один раз в день или раз в неделю, и в этих коллекциях «много документов», вероятно, будет более доступным использовать облачную функцию, как вы это делаете. Вам нужно провести математические расчеты, чтобы оценить предпочтительный подход, основываясь на некоторых цифрах, которые вы единственный знаете (или единственный, кто может оценить).