Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firebase函数-数据库缓存?_Node.js_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Node.js Firebase函数-数据库缓存?

Node.js Firebase函数-数据库缓存?,node.js,firebase,firebase-realtime-database,google-cloud-functions,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,如何在firebase中缓存数据库数据 基于,只要有活动侦听器,firebase就会缓存数据 考虑以下例子: exports.myTrigger = functions.database.ref("some/data/path").onWrite((data, context) => { var dbRootRef = data.after.ref.root; dbRootRef.child("another/data/path").on("value", function

如何在firebase中缓存数据库数据

基于,只要有活动侦听器,firebase就会缓存数据

考虑以下例子:

exports.myTrigger = functions.database.ref("some/data/path").onWrite((data, context) => {
    var dbRootRef = data.after.ref.root;
    dbRootRef.child("another/data/path").on("value", function(){});
    return dbRootRef.child("another/data/path").once("value").then(function(snap){/*process data*/})
}

这将缓存数据,但问题是-这种方法对服务器端有效吗?我是否应该在某个时间点调用
.off()
,这样就不会产生任何问题,因为此调用可以快速扩展,生成大量的“
.on()
”侦听器?或者无限期地保持“
打开”(
”可以吗?

因为活动数据保存在内存中,所以只要侦听器处于活动状态,您的代码就会将最新数据的快照保存在内存中的另一个/data/path。由于您从未在代码中调用
off
,因此只要运行该函数的容器处于活动状态,而不仅仅是在该函数处于活动状态的时间内

即使您在该容器中有其他云函数,并且这些其他函数不需要这些数据,它仍将使用内存


如果这是您想要的行为,那么这是一种有效的方法。我建议你做一个成本/收益分析,因为我认为这可能会在某个时候导致难以理解的行为。

这听起来像是一个错误。通过将数据保存在内存中,您试图实现什么?谢谢@Frankvanpoffelen-似乎您在XY问题上是对的。我的目的是减少服务器端的数据库下载,即firebase功能。因此,该函数仅在发生更改时下载所需的数据-客户端可以在“some/data/path”上执行多次写入,但我希望尽量减少“other/data/path”上的读取次数感谢Frank-是的,我希望数据在同一函数的多个调用中保持不变,以减少“other/data/path”上的读取次数。我如何计算这方面的内存成本?还想知道这会导致“难以理解的行为”的潜在问题是什么?我的理解是,缓存中总会有实际数据,我会根据需要请求这些数据——只是想知道我在这里遗漏了什么。还有一个简单的问题——在同一数据路径上多次“打开”是否可以,或者连接多个侦听器是否会导致效率低下?如果路径上有一个活动侦听器,数据将不会重新下载。