使用云功能访问Firebase数据库

时间:2018-09-21 21:11:38

标签: node.js firebase firebase-realtime-database google-cloud-functions

我正在开发一个使用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(我将从变量中读取)?如果是,该变量是否有大小限制?会比每次从数据库读取更快吗?

1 个答案:

答案 0 :(得分:2)

云函数使用并发性,并且是无状态的。
从文档-

  

为了让Google自动管理和扩展功能,它们   必须是无状态的-一个函数调用不应依赖于内存   先前调用设置的状态

但是,出于优化目的,经常可以重用现有状态。
这是Documentation中有关使用全局变量的提示-

  

不能保证云功能的状态为   保留以供将来调用。但是,云功能经常   回收先前调用的执行环境。如果你   在全局范围内声明变量,其值可以在以下位置重用   随后的调用,而不必重新计算。

全局变量将在冷启动时声明(并可以实例化)。
但是,看看您的示例数据结构,如果数据驻留在Firebase中并且可以更改/更新,则保持全局变量更新将产生额外的开销。

您可能需要重新考虑设计。
为了获得功能的准确结果,您可能需要来自node b的更新数据可用于过滤结果并在调用时从Firebase读取数据。相对于检查和更新全局变量而言,证明是不昂贵的。