【问题标题】:should i use firebase cloud function or not?我应该使用firebase云功能吗?
【发布时间】:2018-05-26 10:22:27
【问题描述】:

我目前正在使用 firebase 实时数据库制作费用管理器应用程序。 我在 firebase 上的数据如下所示:

{ Txns:[{s:"x", amount:1000 }
        {x:"x",  amount:2121 }
        ...
       ]
  Balance: {total:2000(sum of all amounts in txns array)}

}

现在,我想在 json 数组中添加所有金额并将其存储在“余额:”中。那么,我应该为此使用谷歌云功能,还是应该在客户端设备上进行计算? 我知道谷歌云功能是一种聪明的方法,但是,每次用户输入 json 对象时,都会将对象添加到数组中,谷歌云功能将在每个条目上运行,更新余额,谷歌在他们的免费计划中提供了一些有限的读写. 那么,我是否应该担心读写操作计数?

【问题讨论】:

  • 如您所说,最好使用云功能,因为一旦在firebase中添加条目,云功能就会运行,但如果在客户端完成,则会执行此操作每个客户端,这显然需要查询所有金额并将其添加到每个客户端,这将导致更多的数据消耗。
  • 如果您想知道是否应该担心,请开始计算实际成本。
  • Firebase 实时数据库pricing 不是基于读取或写入操作的数量。它主要基于存储和下载的数据的大小。随着交易数量的增加,只读取余额而不是读取所有交易将很快变得更便宜。

标签: android json firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

Firebase 实时数据库pricing 不是基于读取或写入操作的数量。它主要基于存储和下载的数据的大小。随着交易数量的增加,只读取余额而不是读取所有交易将很快变得更便宜。

每个写交易的客户端都可以更新余额。在这种情况下,您需要通过安全规则保护余额的更新,确保余额根据交易中的金额进行更新。并且您需要为这些更新使用事务,或者(最好)在更新被拒绝时实现您自己的客户端重试逻辑。虽然这绝对是可能的,但它会变得非常麻烦。我建议在这里阅读我的答案,了解如何开始的示例:Is the way the Firebase database quickstart handles counts secure?

或者,您可以让受信任的环境(例如您控制的服务器或 Cloud Functions)负责更新余额。这样做的一个好处是您不必再担心安全规则。但缺点是这仅在您的客户端连接到服务器时才有效,其中客户端余额更新的方法将在客户端在线时透明地工作(至少在大多数情况下)。

【讨论】:

  • 根据您的建议,也使其离线兼容。我将使用 android 客户端更新 firebase 数据库中的余额。但是,我无法弄清楚,我该怎么做?因为,在firebase中我们有事件监听器,我不能只在活动打开时请求余额。我将不得不使用事件监听器。问题是当我更新余额时,它会再次触发事件监听器。 @frankvanpuffelen
猜你喜欢
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2020-03-22
  • 2020-06-09
  • 1970-01-01
  • 2018-04-30
相关资源
最近更新 更多