我正在开发一个使用Firebase云功能(Node.js)的应用程序,我想要实现的是在节点a
中创建一个子级时触发一个功能,然后读取另一个节点{{ 1}},遍历数据快照并根据过滤器选择一个子对象:
b
使用{
"a": {
"id1": {
"filters": {
"field1": "value3"
}
}
},
"b": {
"child1": {
"field1": "value1",
"field2": "value2"
},
"child2": {
"field1": "value3",
"field2": "value4"
}
...
}
}
和orderByChild
是不够的,因为我有多个过滤器,并且还有一个范围过滤器(最小和最大之间的年龄),因此我必须遍历节点“ b”选择孩子。
我的问题是我是否可以将节点“ b”存储在全局变量(数组)中,而不是每次都读取整个节点equalTo
(我将从变量中读取)?如果是,该变量是否有大小限制?会比每次从数据库读取更快吗?
答案 0 :(得分:2)
云函数使用并发性,并且是无状态的。
从文档-
为了让Google自动管理和扩展功能,它们 必须是无状态的-一个函数调用不应依赖于内存 先前调用设置的状态
但是,出于优化目的,经常可以重用现有状态。
这是Documentation中有关使用全局变量的提示-
不能保证云功能的状态为 保留以供将来调用。但是,云功能经常 回收先前调用的执行环境。如果你 在全局范围内声明变量,其值可以在以下位置重用 随后的调用,而不必重新计算。
全局变量将在冷启动时声明(并可以实例化)。
但是,看看您的示例数据结构,如果数据驻留在Firebase中并且可以更改/更新,则保持全局变量更新将产生额外的开销。
您可能需要重新考虑设计。
为了获得功能的准确结果,您可能需要来自node b
的更新数据可用于过滤结果并在调用时从Firebase读取数据。相对于检查和更新全局变量而言,证明是不昂贵的。