Облачные функции Firebase: как обработать несколько триггеров, вызванных другой облачной функцией? - PullRequest
0 голосов
/ 20 апреля 2020

Я пишу веб-приложение на Firebase, и у меня есть следующая схема Firestore и структура данных:

  db.collection('users').doc{{userid}) // Each doc stores data under 'userinfo' index, which is an object(map).
  db.collection('posts').doc({postid}) // Each doc contains 'userinfo', which is the data about the person who posted.
  db.collection('saved').doc({userid}) // Each doc stores data under 'saved' index, which is an array of carbon copy of a document in 'posts' collection.

Я думаю о написании ниже облачных функций:

- Функция облака A: Прослушайте обновления в одном из документов в коллекции 'users' и обновите каждый из документов в коллекции 'posts' предыдущей userinfo.

-Клавишная функция B: Привязать к обновлениям в одном из документов в коллекции «posts» и обновите каждый из документов в «сохраненной» коллекции, которая содержит предыдущую postinfo.

Сложность здесь заключается в том, что облачная функция A после запуска обновит несколько документов в ' коллекция сообщений, каждая из которых снова будет триггером. Если пользователь написал 100 сообщений, тогда может быть 100 триггеров одновременно.

Для обработки такого случая, что из следующего является естественным следующим шагом для меня? На вопрос, потому что ответ будет зависеть от того, как облачные функции Firebase справятся с подобной ситуацией, но я не очень разбираюсь в этом на данный момент:

a) Написать функцию B как транзакцию, потому что облачная функция Firebase справится с этой ситуацией, поставив в очередь каждый из триггеров в некотором порядке.

b) Напишите функцию B, чтобы все еще прослушивать обновление и отображать его в «сохраненной» коллекции, но не как транзакцию, чтобы избежать массового Задержки, вызванные блокировками базы данных.

c) Переосмыслите структуру базы данных и / или логи облачной функции c, чтобы избежать такой ситуации с самого начала.

Возможно, это правильно или неправильно ответ (или есть один в этом случае?), но просто хотел получить некоторые указания о направлении, прежде чем на самом деле писать коды. Любой совет? Заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...