【问题标题】:when to use firebase functions and when to use firestore client functions?何时使用 firebase 功能以及何时使用 firestore 客户端功能?
【发布时间】:2019-12-09 13:49:00
【问题描述】:
我有一个项目,我需要将数据和图像一起写入,即同时写入Cloud Storage 和Firestore Database,云存储和云都没有批量写入Firestore 结合,所以唯一的解决办法就是一个接一个地做,即把一个东西写到数据库,当它成功时再写下一个。
问题是当写入第一个数据成功而第二个数据失败时,我必须恢复事务,我认为从客户端这样做不好,可能会有互联网连接中断。
所以我的问题是我是否应该将 Cloud Functions 用于写入数据库的所有内容?
【问题讨论】:
标签:
java
firebase
kotlin
google-cloud-firestore
google-cloud-functions
【解决方案1】:
Cloud Functions 本质上是使用 Admin SDK 访问 Firebase 的小型节点脚本。除了 API 之外,它们没有特殊的权力,这意味着它们与在其他地方使用该 API 具有相同的限制。
使用云函数将减少相关操作之间发生中断的机会,但它不会消除这种机会。
这意味着您必须以某种方式处理干扰。通常这是一个两步过程:
- 确保读取数据的所有代码都对不完整的数据具有鲁棒性。例如,从数据库中读取(下载)URL 后,不要假设它指向的文件存在。它可能不存在的原因有很多(事后删除、服务不可用等),所以无论如何这是个好主意。
- 定期运行检测不完整数据并将其清理的脚本。例如,每天运行一个 Cloud Function,获取 Cloud Storage 中所有文件的列表,如果数据库中没有对它们的引用,则将其删除,然后从数据库中读取所有 URL,并检查它们是否仍然存在.
我承认第二步通常是我稍后添加的。第一步已经确保应用程序运行正常,因此清理只是在那时的一些数据存储优化。