Сколько коллекций и документов Firestore я могу записать в 1 облачную функцию?

# #firebase #google-cloud-platform #google-cloud-firestore #google-cloud-functions #webhooks

Вопрос:

Итак, у меня есть веб-крючок, который доставляет полезную нагрузку JSON на URL-адрес моей облачной функции.

В рамках этой облачной функции каковы мои ограничения для записи JSON в мой облачный магазин Firestore?

Я не могу сбросить всю полезную нагрузку JSON в один документ в коллекции, поэтому мне нужно проанализировать все это в разных полях.

Таким образом, моя облачная функция будет выглядеть примерно так:

 await admin.firestore().collection("collection1").doc(doc1).set({
field1: data.fieldFromJson1
})
 
 await admin.firestore().collection("collection1").doc(doc1).collection("sub-collection1").doc(doc2).set({
field2: data.fieldFromJson2
})
 

Могу ли я сделать это в 1 облачной функции или мне нужно 2 функции?

У меня есть 100 строк JSON для разбора по всему облачному магазину firestore, поэтому этот пример очень упрощен.

Ссылки и документация:

https://cloud.google.com/functions/docs

https://github.com/firebase/functions-samples

Ответ №1:

Технически никаких ограничений нет, и пока вы придерживаетесь ограничений по тарифам, определенных в документации, с вами все будет в порядке. Если это один веб-справочник, содержащий все данные, то вы можете написать все документы за один раз. Вы можете использовать Promise.all() или Batch Writes (при написании максимум 500 документов).

 // parse data and map an array as shown below 
const promises = [
  admin.firestore().collection("collection1").doc(doc1).set({
    field1: data.fieldFromJson1
  }),
  admin.firestore().collection("collection1").doc(doc1).collection("sub-collection1").doc(doc2).set({
    field2: data.fieldFromJson2
  })
]

await Promise.all(promises)
// any other processing

res.status(200).end() // terminate the function
 

Если вы ожидаете большого объема данных, анализ которых может занять некоторое время, убедитесь, что вы установили более высокий тайм-аут для функции (по умолчанию 60 секунд).