Firebase“更新”操作是否下载数据?

时间:2018-07-27 20:02:09

标签: javascript firebase firebase-realtime-database google-cloud-functions

我正在分析我的Firebase数据库中的“下载漏洞”(我正在使用JavaScript SDK / firebase函数Node.js),最后缩小到“更新”功能,该功能出人意料地导致了数据下载(这影响了我的帐单这种情况非常明显-约有50%的账单来自此泄漏):

Firebase函数index.js:

exports.myTrigger = functions.database.ref("some/data/path").onWrite((data, context) => {
    var dbRootRef = data.after.ref.root;
    return dbRootRef.child("/user/gCapeUausrUSDRqZH8tPzcrqnF42/wr").update({field1:"val1", field2:"val2"})
}

此函数在“ / user / gCapeUausrUSDRqZH8tPzcrqnF42 / wr”节点上生成下载

如果我将路径更改为以下内容:

exports.myTrigger = functions.database.ref("some/data/path").onWrite((data, context) => {
    var dbRootRef = data.after.ref.root;
    return dbRootRef.child("/user/gCapeUausrUSDRqZH8tPzcrqnF42").update({"wr/field1":"val1", "wr/field2":"val2"})
}

它在“ / user / gCapeUausrUSDRqZH8tPzcrqnF42”节点上生成下载。

这是firebase database:profile

的结果

enter image description here

由于只需要上传数据,如何在更新数据时减少下载或减少使用量?

2 个答案:

答案 0 :(得分:1)

我认为Firebase cloudfunction触发器不可行。

.onWrite((data, context)有一个data字段,它是完整的DataSnapshot。  而且无法配置不提取其val

不过,您可以采取两种措施来降低数据成本:

  1. 观看较小的触发器集。例如functions.database.ref("some/data/path")("some")
  2. 使用更具体的钩子。即onCreate()onUpdate() vs onWrite()

答案 1 :(得分:0)

您应该期望所有操作都将与您的客户端代码往返。否则,客户如何知道工作何时完成?表达这一点将需要一些空间。您正在显示的屏幕截图(非常小且难以阅读-考虑将文本直接复制到您的问题中)表明下载的数据量很小。

要更好地了解实际成本,请运行多个测试,看看建立连接后,微小的成本本身是否仅仅是客户端和服务器之间一次握手的一部分。由于随着重复使用Cloud Functions实例,随着时间的推移,您的功能代码会保持持久的连接,因此这可能不是问题。