我正在分析我的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
由于只需要上传数据,如何在更新数据时减少下载或减少使用量?
答案 0 :(得分:1)
我认为Firebase cloudfunction触发器不可行。
.onWrite((data, context)
有一个data
字段,它是完整的DataSnapshot
。
而且无法配置不提取其val
。
不过,您可以采取两种措施来降低数据成本:
functions.database.ref("some/data/path")
与("some")
。onCreate()
和onUpdate()
vs onWrite()
。答案 1 :(得分:0)
您应该期望所有操作都将与您的客户端代码往返。否则,客户如何知道工作何时完成?表达这一点将需要一些空间。您正在显示的屏幕截图(非常小且难以阅读-考虑将文本直接复制到您的问题中)表明下载的数据量很小。
要更好地了解实际成本,请运行多个测试,看看建立连接后,微小的成本本身是否仅仅是客户端和服务器之间一次握手的一部分。由于随着重复使用Cloud Functions实例,随着时间的推移,您的功能代码会保持持久的连接,因此这可能不是问题。