Firebase Firestore。快照上的“成本”

Posted

技术标签:

【中文标题】Firebase Firestore。快照上的“成本”【英文标题】:Firebase Firestore. "Cost" onSnapshot 【发布时间】:2018-12-27 23:42:49 【问题描述】:

我需要在页面上放置大约 20 个 Vue 组件。每个组件在挂载时都会为自己创建一个onSnapshot,并相应地在它被删除时创建unsubscribe()

const ref = firebase.firestore().collection('components').doc('comp1')

var unsubscribe = ref.onSnapshot(querySnapshot => 
  querySnapshot.forEach(doc => 
     ...
  )

每个onSnapshot / unsubscribe 的成本是多少:

    就执行时间而言 在金钱意义上(根据 Firebase 的价格)

例如,如果 1000 个用户中的每个用户在半小时内更新一个包含 20 个组件的页面 100 次,我将支付多少?

也许将onSnapshot 放在整个collection 的组件上会更好?

【问题讨论】:

如果您担心读/写操作过多,您可以切换到 Firebase 实时数据库,因为它只对带宽和存储收费,而 Firestore 的成本取决于 crud 操作。 See documentation here 谢谢,但我最近刚从实时数据库切换到 Firestore!出于某种原因,实时数据库不适合我。我需要知道我的决定是否正确。我还想了解此特定解决方案的定价,以确定是否需要连接付费计划。 您的 20 个组件都需要实时更新吗?您可以将混合解决方案替换为fetching data once,并且只启用真正需要的组件的实时更新 也就是说,我的决定是“昂贵的”,不应该这样做吗?是否值得为整个组件集合做一个onSnapshot?这样更好吗? 如果您的所有数据都在一个集合中,那将是一个好方法 【参考方案1】:

在Firestore documentation找到你需要的信息

收听查询结果

Cloud Firestore 允许您监听查询结果并在查询结果发生变化时获取实时更新。

当您收听查询结果时,每次添加或更新结果集中的文档时,您都需要支付一次读取费用。当由于文档已更改而从结果集中删除文档时,您还需要支付读取费用。 (相比之下,删除文档后,您无需为阅读付费。)

此外,如果侦听器断开连接超过 30 分钟(例如,如果用户离线),您将被收取读取费用,就像您发出了全新的查询一样

因此,每次更新集合中的记录时,所有订阅用户都会执行读取。您应该花时间估计您将拥有的活跃用户数量以及数据的数量/频率,这将有助于采用最适合您的应用的最便宜和最佳的解决方案。

我还将添加默认的Firebase pricing calculator,它位于页面底部,肯定会帮助您做出决定。

【讨论】:

"另外,如果监听器断开连接超过 30 分钟(例如,如果用户下线),您将被收取读取费用,就像您发出了一个全新的查询一样" 任何知道这部分是什么意思吗? 我认为这意味着当用户回来并且数据更新时,尽管它不再是数据的“实时快照”,但您仍然会像以前一样被收费

以上是关于Firebase Firestore。快照上的“成本”的主要内容,如果未能解决你的问题,请参考以下文章

从Firebase本地实时存储Room DB上的数据

react-native如何删除firebase快照上的持久性

Flutter:Firebase 身份验证和 Firestore 快照流

在 Firebase Firestore 中映射集合快照项

Firestore:如果两个侦听器监听相同的查询 firebase 维护两个不同的查询快照?

Firebase Firestore get() 快照在第二次查询时冻结