firebase - Firebase 在这些用例中读取了多少数据
问题描述
我正在创建一个聊天应用程序,最初我将开始(或尝试)使用免费的 Firebase 计划,该计划每天最多允许 50.000 个读数。该应用程序列出了对话,当您打开对话时,消息会显示在一个列表中,从实时数据库 Firebase 中检索。
如果用户打开包含 1.000 条消息的对话,是否会计算 1.000 条读数?
在
onStop
消息活动中调用时,我会valueEventListener
从消息中删除侦听器。那么如果用户关闭消息屏幕并重新打开 50 次,是否会生成 50.000 个读数并且免费计划达到限制?
解决方案
- 如果用户打开一个包含 1.000 条消息的对话,是否会计算 1.000 条读数?
Firebase 实时数据库不计算您阅读的消息数。如果您这么认为,您可能会将其与 Cloud Firestore 混淆。
Firebase 实时数据库根据从服务器发送到客户端上的各种侦听器的数据量收费。因此,如果您收听全部 1000 条消息,您将按全部 1000 条消息的数据量付费。但是,例如,如果您创建一个仅侦听最后 100 条消息的查询,则您只需为这 100 条消息传输的数据量付费。
- 在消息活动中调用 onStop 时,我从消息中删除了 valueEventListener 侦听器。那么如果用户关闭消息屏幕并重新打开 50 次,是否会生成 50.000 个读数并且免费计划达到限制?
这取决于您如何配置您的应用程序。默认情况下,只要侦听器附加到该数据,数据就会保存在内存中。这意味着如果您附加最后一个/唯一的侦听器,则数据将从内存中删除,并且确实在附加新侦听器时必须从服务器重新加载。
但是,您可以在客户端中启用磁盘持久性,这意味着除了将数据保存在内存中之外,它还将数据持久保存到磁盘缓存中。分离侦听器时的行为是相同的:它从内存中删除。但是当你附加一个新的监听器时,在这种情况下,Firebase 客户端将首先加载它在磁盘缓存中的数据,然后仅向服务器询问已更改的数据。这通常会大大减少数据传输,但很难说精确到多少。
请注意,磁盘持久性与 结合得很好,因此只有在使用oraddListenerForSingleValueEvent
时才应使用它。无论如何,这些都是从 Firebase 获取数据的最惯用的方式,因此使用它的任何更改都可能对您的用户体验有益。addChildEventListener
addValueEventListener