观察Firebase的特定数据集

时间:2017-10-08 13:55:05

标签: swift firebase firebase-realtime-database

我使用Firebase来实现iOS匿名聊天应用。

我的应用程序有一个聊天室列表,点击该房间将加入群聊,喜欢Facebook Messenger。 数据库的结构看起来像

rooms
  |- AAA
     |- messages
        |- "aaaaa"
        |- "bbbbb"
        |- "ccccc"
  |- BBB
     |- messages
        |- "ddddd"
        |- "eeeee"
  |- CCC
     |- messages
        |- "fffff"
        |- "ggggg"
  ...

如果用户加入会议室,例如AAABBB。应用会将AAABBB存储在本地存储中。如何观察新消息已添加到AAABBB但未观察到CCC

我阅读了Firebase的文档。我可能有一些方法可以做到这一点。

  1. 观察整个rooms节点,并在应用中过滤AAABBB。但我认为如果rooms太多,会导致性能问题。数据量太大了。
  2. AAABBB创建单独的观察者。它可以解决我的问题,但如果我的用户加入太多rooms。观察许多节点看起来没有意义。
  3. 设置规则以控制可以同步哪个rooms。但我必须记录用户进入房间。我必须管理匿名用户和聊天的关系。
  4. 有没有更好的性能可以解决我的问题?

    也许喜欢

    ['AAA', 'BBB'].observe(.childAdded, {
        // do something
    })
    

    或欢迎任何建议!

    谢谢

1 个答案:

答案 0 :(得分:0)

Firebase数据库观察员始终检索整个节点。除了查询的能力之外,无法检索部分节点。但在您的情况下,您无法使用查询,因为您无法在查询中执行OR,并且聊天室可能不在范围内。

如果您尝试确保用户所在的房间在离线状态时进行缓存,则可以在每个房间call keepSynced(true)。这实际上会添加一个空侦听器,以确保(磁盘)缓存保持最新。

如果您想要显示多个聊天室,则需要使用多个观察者:每个房间一个。