提问者:小点点

使用附加侦听器对Firebase RTDB或Fi恢复进行本地写入是否需要读取操作?


在这份火炉官方指南中,它说

应用程序中的本地写入将立即调用快照侦听器。这是因为一个称为“延迟补偿”的重要功能。当您执行写入时,您的侦听器将在数据发送到后端之前收到新数据的通知

  1. 所以Fi恢复客户端(发布此数据)不会通过侦听器从服务器获取此数据?
  2. 这是否仍会作为读取操作收费(以防未从服务器获取数据)?
  3. 这个概念是否也适用于实时数据库?

我用一个客户端将新对象写入/chats/chatRoomId/进行了测试,并且同一个客户端在/chats/chatRoomId/上具有child_added的侦听器。我关闭了互联网,仍然报告推送新数据正常(我猜是由于离线能力),侦听器也报告接收到新数据(即使没有服务器访问)

我想构建我的聊天应用程序的DB,这样我就可以降低聊天DB结构中不必要的阅读成本(如果有的话)。

chats: {
  $roomId: {
    $messageId: {
      senderId: "..."
      message: "..."
    }
  }
}

示例:

考虑1:1聊天,其中userA和userB(在不同的客户端上)在聊天室中,并且都为/chats/chatRoomId/添加了侦听器。现在,如果userA在chatRoomId中推送新消息,两个用户A

如果本地写入不会花费我为附加侦听器读取服务器,我会按照建议将来自userA和userB的消息存储在相同的路径/chats/chatRoomId/

否则,我想有一个DB的结构,以便userA只会监听来自userB的消息。例如,userA将为userB推送新的msg到/chats/uid_A/uid_B/,userA将监听/chats/uid_B/uid_A/,其中userB正在为userA推送新的msg。客户端将在本地合并按时间排序的两条路径,以获得一个聊天流。

它可能会为我节省50%的阅读量,并节省大量的火力账单。

2019年3月5日编辑:


共1个答案

匿名用户

  1. 所以Fi的客户端(发布了这些数据)不会通过监听器从服务器获取这些数据?

当您在本地写入某些数据时,将立即调用快照侦听器。这意味着您的侦听器将立即收到通知,因为您添加了一些新数据。但请记住,此操作发生在数据发送到Firebase服务器之前。

不可以。只要您有缓存数据并且没有将数据与Firebase服务器同步,您就不会被收取Fi恢复中的任何“读取操作”费用。

不,不是。Firebase实时数据库对定价有不同的概念。

我想构建聊天应用的DB,这样我就可以在Firebase的@FrankVanPuffelen推荐的聊天DB结构中降低不必要的阅读成本(如果有的话)。

这两个示例都适用于Firebase实时数据库,并且都解释了创建聊天应用程序的非常好的方法。如果您考虑在某个时候尝试将Cloud Fi恢复用于聊天应用程序,您可以在此处找到有关如何创建完整且功能齐全的Fi恢复聊天应用程序的教程。

我还认为您可能对以下文章感兴趣:

  • https://medium.com/firebase-tips-tricks/how-to-drastically-reduce-the-number-of-reads-when-no-documents-are-changed-in-firestore-8760e2f25e9e