【发布时间】:2019-02-10 00:58:19
【问题描述】:
我们的团队正在开发一款移动应用,目前正在使用 (Firebase) Firestore 作为我们的后端。我们使用 Firebase 函数包装了每个数据库访问,以便清理返回给客户端应用的对象。
与直接访问 Firestore 相比,这种方法是否会引入任何(额外的)不可忽视的开销?
【问题讨论】:
标签: firebase google-cloud-firestore
我们的团队正在开发一款移动应用,目前正在使用 (Firebase) Firestore 作为我们的后端。我们使用 Firebase 函数包装了每个数据库访问,以便清理返回给客户端应用的对象。
与直接访问 Firestore 相比,这种方法是否会引入任何(额外的)不可忽视的开销?
【问题讨论】:
标签: firebase google-cloud-firestore
是,但不是,具体取决于您的用例。
如果您的用户数量较少且使用率相对较低(就给定配额而言),建议应用 Cloud Functions。正如documentation 中所述,Firebase Cloud Function 在资源限制、时间限制和速率限制方面提供了很大的配额,并且价格合理,特别是对于 Spark 计划(免费)。
使用云函数的优势是高速和可扩展的计算/处理单元,可以缩短处理时间与使用手机CPU相比的特定功能,在某些情况下手机计算能力较低(必须考虑各种用户,因为并非每个人都拥有高规格手机),以提供更好的用户体验(UX),所有这个麻烦可以通过 Cloud Function 来解决!
注意:我同意 Doug 的观点,其中成本是因素之一,但我们还应该考虑性能和其他方面。
【讨论】:
是的,至少,现在您获取数据的路径有两跳而不是一跳。之前,您使用针对返回查询结果进行了优化的通道直接访问数据库。现在,您必须支付额外一跳到 Cloud Functions 的费用,这会进行查询。并且有可能返回给客户端的结果比直接查询的要大。
也许您会遇到的最大损失是客户端自动执行的文档的客户端缓存(在 Android 和 iOS 上默认启用)。如果您重复查询并且没有任何文档发生更改,则您可以立即从缓存中获得结果,而不必等待服务器。而且您不必为缓存命中支付文档读取费用。因此,如果您不同时缓存结果,您还需要支付 Cloud Functions 的货币成本和针对每个请求对 Firestore 的查询。
【讨论】:
是的,但答案可能会因情况而异。
如果客户端想要获取与数据库中完全相同的记录,Firebase SDK 可能会更快,因为调用 Firebase 函数没有开销。
如果我们在获取记录后进行繁重的处理,那么 Firebase Functions + Firebase Admin SDK 可能会更快,因为 Firebase Functions 中的处理单元可能比移动 CPU 更快。但是,如果请求响应更快,客户端应用程序可能会在繁重的处理过程中显示附加消息,表明某些内容已获取并且当前正在处理中,用户体验可能是可以接受的。
我能想出 Firebase Functions 的唯一情况总是能胜出,那就是服务器减少了数据大小,以便 Firebase Functions 引入的开销(包括处理时间)通过更短的网络延迟得到补偿。这也有节省客户数据计划的好处。
【讨论】: