【问题标题】:Firebase functions - database cache?Firebase 功能 - 数据库缓存?
【发布时间】:2019-01-05 05:30:42
【问题描述】:

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

基于this SO answer,只要有活动的侦听器,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()”听众?还是可以无限期保留“on()”?

【问题讨论】:

  • 这听起来像XY problem。您想通过将数据保存在内存中来完成什么?
  • 谢谢@FrankvanPuffelen - 看起来你对 XY 问题是正确的。我的目的是减少发生在服务器端的数据库下载,即 firebase 功能。因此,该函数仅在发生更改时才下载所需的数据 - 客户端可以在“some/data/path”处执行多次写入,但我想尽量减少在“another/data/path”处的读取次数

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


【解决方案1】:

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

即使您在该容器中有其他 Cloud Functions 函数,并且这些其他函数不需要这些数据,它仍然会使用内存。

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

【讨论】:

  • 谢谢弗兰克 - 是的,我希望数据在同一函数的多次调用中保持不变,以减少“另一个/数据/路径”处的读取次数。我如何计算内存成本?还想知道这可能导致“难以理解的行为”的潜在问题是什么?我的理解是,缓存中总会有实际数据,我会根据需要请求这些数据——只是想知道我在这里缺少什么。
  • 一个更快速的问题 - 是否可以在同一数据路径上多次调用“on”,或者附加多个侦听器会导致效率低下?
  • 如果路径上有活动监听器,则不会重新下载数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2022-01-19
相关资源
最近更新 更多