【问题标题】:Firestore read/write vs cloud function read/writeFirestore 读/写 vs 云函数读/写
【发布时间】:2020-03-01 04:33:18
【问题描述】:
我正在使用 Firestore 我有这些问题,关于用户行为如何影响应用成本:
什么更划算:
问题:
- 使用云功能代理是否过大? (只是为了避免成本)
- 当用户键入(实时更新)时,是否每次都将其视为对数据库的新写入?
【问题讨论】:
标签:
firebase
google-cloud-firestore
google-cloud-functions
【解决方案1】:
什么更划算:
每次实时保存表单时,这将花费您一次写入。
- 使用 firebase 函数一次保存表单中的所有字段
这将花费您一次写入。
两者之间的成本差异应该很明显 - 多次写入与单次写入。
问题:
使用云功能代理是否过大? (只是为了避免成本)
如果您只是为了节省成本而进行代理,那就太过分了。除了文档写入之外,函数调用将花费您的钱,无论它来自何处,都将花费相同的成本。
- 当用户键入(实时更新)时,是否每次都将其视为对数据库的新写入?
正如我之前所说,是的。
通过函数发送表单提交的唯一真正原因是能够对表单字段的有效性进行深入、安全的检查。客户端检查不安全。您可以使用安全规则来执行检查,但这些是有限的。如果您需要确保表单字段具有严格检查的值,云函数可能是您的最佳选择。但鉴于您问题中的信息,无法判断。
【解决方案2】:
没有什么特别的原因需要使用函数同时保存所有内容——在任何时候调用函数,而不是调用对数据库的单个更新。在这里使用函数会更加昂贵(假设它不提供除数据库写入之外的其他功能),因为您会产生写入成本并且会产生函数执行成本。
当然,除了简单的代理之外,您还可能有其他原因调用云函数来执行写入操作——例如确保仅由安全规则无法强制执行的约束。在这种情况下,成本可能值得增加功能。
至于批处理还是实时写入更好,一次写入肯定会更便宜,因为你是charged for every document write 到 Firestore。更具体地说,每个set 或update 都作为单次写入收费。因此,与用户输入数据时实时(或按字段)编写文档相比,为多个字段只编写一次文档肯定会更便宜。