firebase - 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) 重新考虑数据库结构和/或云功能逻辑,从一开始就避免这种情况。
可能有正确或错误的答案(或者在这种情况下是否有答案?),但只是想在实际编写代码之前获得一些方向指导。有什么建议吗?提前非常感谢!
解决方案
推荐阅读
- ios - Unity 到 iOS,在 PostProcessBuild 之后覆盖 info.plist
- boost - 在 Windows 上交叉编译 ARM 的 Boost
- javascript - 从“react-select”中的清除所有图标中清除输入值后无法聚焦
- gpflow - 乘以内核和函数
- python - 如何确定模块是否安装在 Python 2.7 Linux 环境中?
- sql - 我正在尝试在 SQL 中比较一周和三年内的下一周
- oracle - 如何从返回多个 OUT 值的过程中仅访问一个 OUT 值?
- javascript - Why does only one BrowserView work with Electron?
- javascript - 用JS建表时如何添加图片切片代替createTextNode
- pyspark - 在 Athena 中重命名列