【发布时间】:2019-09-19 00:38:46
【问题描述】:
在这个firestore官方guide中,它说
应用中的本地写入将调用快照侦听器 立即地。这是因为一个重要的特性叫做“延迟 补偿。”当您执行写入时,您的听众将 在数据发送到后端之前通知新数据
- 所以 Firestore 客户端(发布此数据的)不会通过侦听器从服务器获取此数据?
- 这是否仍会作为读取操作收费(以防数据未从服务器获取)?
- 这个概念是否也适用于实时数据库?
我测试了一个客户端向/chats/chatRoomId/ 写入新对象,而同一客户端在/chats/chatRoomId/ 上有child_added 的侦听器。我关闭了互联网,仍然报告推送新数据正常(我猜是由于离线能力),并且听众也报告接收到新数据(即使没有服务器访问)
我想构建我的聊天应用程序的数据库,这样我就可以在给定here 和here 的聊天数据库结构中减少不必要的读取(如果有)的成本@FrankVanPuffelen 推荐来自 Firebase。
chats: { $roomId: { $messageId: { senderId: "..." message: "..." } } }
示例:
考虑一个 1:1 聊天,其中 userA 和 userB(在不同的客户端上)在一个聊天室中,并且都向/chats/chatRoomId/ 添加了一个侦听器。现在,如果用户 A 在chatRoomId 中推送一条新消息,则用户 A 和 B 都将通过他们的侦听器收到这条新消息。这不是浪费带宽和/或 userA 的读取操作成本,因为他自己推送它,并且可能不需要从服务器获取它。
如果本地写入不会花费我为附加侦听器读取的服务器,我会将来自 userA 和 userB 的消息存储在同一路径 /chats/chatRoomId/ 和 recommended 中
否则,我想要一个 DB 结构,以便 userA 将只收听来自 userB 的消息。例如
userA 会将 userB 的新消息推送到 /chats/uid_A/uid_B/,userA 将监听 /chats/uid_B/uid_A/,其中 userB 正在为 userA 推送新消息。并且客户端会在本地合并这两条按时间排序的路径,得到一个聊天流。
它可能会为我节省 50% 的阅读量,并节省大量的 firebase 费用。
于 2019 年 3 月 5 日编辑:
【问题讨论】:
标签: firebase firebase-realtime-database google-cloud-firestore