首页 > 解决方案 > Firebase 云函数:如何处理由另一个云函数引起的多个触发器?

问题描述

我正在 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'集合中的一个文档的更新,并用之前的userinfo更新'posts'集合中的每个文档。

-Cloud 功能 B:监听“posts”集合中的一个文档的更新,并更新“已保存”集合中包含先前 postinfo 的每个文档。

这里的复杂之处在于,云函数 A 一旦被触发,将更新 'posts' 集合中的多个文档,每个文档都将再次成为触发器。如果用户写了 100 个帖子,那么一次可以有 100 个触发器。

为了处理这种情况,以下哪个是我自然的下一步?问是因为答案将取决于 Firebase Cloud Functions 如何处理这种情况,但我目前对此知之甚少:

a) 将函数 B 编写为事务,因为 Firebase Cloud Function 将通过按某种顺序对每个触发器进行排队来处理这种情况。

b) 编写函数 B 以继续侦听更新并将其反映到“已保存”集合中,但不作为事务以避免数据库锁定导致的大量积压。

c) 重新考虑数据库结构和/或云功能逻辑,从一开始就避免这种情况。

可能有正确或错误的答案(或者在这种情况下是否有答案?),但只是想在实际编写代码之前获得一些方向指导。有什么建议吗?提前非常感谢!

标签: firebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


推荐阅读