我使用Firebase来实现iOS匿名聊天应用。
我的应用程序有一个聊天室列表,点击该房间将加入群聊,喜欢Facebook Messenger。 数据库的结构看起来像
rooms
|- AAA
|- messages
|- "aaaaa"
|- "bbbbb"
|- "ccccc"
|- BBB
|- messages
|- "ddddd"
|- "eeeee"
|- CCC
|- messages
|- "fffff"
|- "ggggg"
...
如果用户加入会议室,例如AAA
和BBB
。应用会将AAA
和BBB
存储在本地存储中。如何观察新消息已添加到AAA
或BBB
但未观察到CCC
?
我阅读了Firebase的文档。我可能有一些方法可以做到这一点。
rooms
节点,并在应用中过滤AAA
和BBB
。但我认为如果rooms
太多,会导致性能问题。数据量太大了。AAA
和BBB
创建单独的观察者。它可以解决我的问题,但如果我的用户加入太多rooms
。观察许多节点看起来没有意义。rooms
。但我必须记录用户进入房间。我必须管理匿名用户和聊天的关系。有没有更好的性能可以解决我的问题?
也许喜欢
['AAA', 'BBB'].observe(.childAdded, {
// do something
})
或欢迎任何建议!
谢谢
答案 0 :(得分:0)
Firebase数据库观察员始终检索整个节点。除了查询的能力之外,无法检索部分节点。但在您的情况下,您无法使用查询,因为您无法在查询中执行OR
,并且聊天室可能不在范围内。
如果您尝试确保用户所在的房间在离线状态时进行缓存,则可以在每个房间call keepSynced(true)
。这实际上会添加一个空侦听器,以确保(磁盘)缓存保持最新。
如果您想要显示多个聊天室,则需要使用多个观察者:每个房间一个。