在这份火炉官方指南中,它说
应用程序中的本地写入将立即调用快照侦听器。这是因为一个称为“延迟补偿”的重要功能。当您执行写入时,您的侦听器将在数据发送到后端之前收到新数据的通知
我用一个客户端将新对象写入/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日编辑:
当您在本地写入某些数据时,将立即调用快照侦听器。这意味着您的侦听器将立即收到通知,因为您添加了一些新数据。但请记住,此操作发生在数据发送到Firebase服务器之前。
不可以。只要您有缓存数据并且没有将数据与Firebase服务器同步,您就不会被收取Fi恢复中的任何“读取操作”费用。
不,不是。Firebase实时数据库对定价有不同的概念。
我想构建聊天应用的DB,这样我就可以在Firebase的@FrankVanPuffelen推荐的聊天DB结构中降低不必要的阅读成本(如果有的话)。
这两个示例都适用于Firebase实时数据库,并且都解释了创建聊天应用程序的非常好的方法。如果您考虑在某个时候尝试将Cloud Fi恢复用于聊天应用程序,您可以在此处找到有关如何创建完整且功能齐全的Fi恢复聊天应用程序的教程。
我还认为您可能对以下文章感兴趣: