Ограничение одновременного использования Firestore при выполнении облачной задачи

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

Вопрос:

Я пытаюсь использовать облачную задачу, чтобы выполнять облачную функцию каждую минуту. Только представьте, что в firestore есть коллекция из 2 миллионов документов. Поэтому я буду читать этот сборник каждую минуту.

 Document 1-->
     PerformAt: 3rd of September 2021 at 09:00AM
     Status: Scheduled

Document 2-->
    PerformAt: 3rd of September 2021 at 01:00PM
    Status: Scheduled

Document 3-->
    PerformAt: 2nd of September 2021 at 03:00PM
    Status: Done
 

Облачная функция—>

 const query = db.collection('tasks').where('PerformAt', '<=', now).where('Status', '==', 'scheduled');
 

В этом случае он прочитает 2 миллиона документов о том, где запланирован статус.
Мои вопросы таковы,

  1. если я буду запускать это каждую минуту, повлияет ли это на производительность моего приложения?
  2. Для каждой базы данных разрешено только 1 миллион одновременных пользователей, следовательно, будет ли эта облачная функция рассматриваться как 2 миллиона одновременных пользователей или только один пользователь?
  3. Сколько времени требуется, чтобы прочитать около 2 миллионов документов?
  4. Кроме того, мне нужно изменить статус, как сделано при выполнении В этом случае Firebase разрешает записывать только 10 000 записей в базу данных. Что я могу сделать, чтобы выйти из этой ситуации?

Ответ №1:

Пожалуйста, ограничьтесь одним вопросом на каждый пост в дальнейшем.

  1. Да, любой выполняемый вами код повлияет на производительность вашего приложения, но, не зная точно, что делает ваш код, невозможно будет сказать, как это повлияет.
  2. Каждый экземпляр облачной функции считается только одним подключением.
  3. Производительность запроса зависит только от количества документов (и их размера), возвращаемых запросом, а не от количества документов в коллекции. Поэтому, если каждую минуту только несколько задач удовлетворяют .where('PerformAt', '<=', now).where('Status', '==', 'scheduled') условию, то читаются только эти документы.
  4. Ограничение в 10 000 записей в секунду. Маловероятно, что вы столкнетесь с этим, но если вы это сделаете, то обойти это невозможно (такова природа ограничений).

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

1. Спасибо вам за ваш быстрый ответ. Но мне нужно уточнить ответы 3 и 4. Просто представьте,что одновременно имеется 1,5 миллиона документов, удовлетворяющих вышеуказанному условию, В этом случае облачная функция начнет запись для всех 1,5 миллионов документов одновременно или она будет записывать один за другим?

2. Все зависит от того, как вы реализуете этот вариант использования. Невозможно прокомментировать поведение системы без гораздо большей информации/кода о том, как вы ее реализуете.

3. Извините за путаницу, Последний вопрос, Не могли бы вы объяснить мне, Пожалуйста, Если ограничение записи составляет 10 000 в секунду на базу данных, когда я использую облачную функцию для обновления значений 1,5 миллиона документов. По умолчанию Будет ли он обновлять 10 000 документов за 1 секунду, затем еще 10 000 документов за 2 секунды и так далее ? или он пытается обновить все значения за секунду и увеличить трафик?