iOS Firebase数据库设计问题:为Cloud Firestore设计聊天应用程序的最佳方法?

时间:2018-11-13 16:49:45

标签: ios swift firebase google-cloud-firestore

我正在使用聊天应用程序。我的Firebase云存储看起来像这样

Messages =包含每个用户的全部消息,服务发布之初的每个消息都收集在此处。它可能包含1,000,000,000,000〜条消息

Messages | msg1                    | msgID = msg1
         | msg2                    | roomID = room03
         | msg3                    | content = "HELLO"
         | ....... msg100,000,000  |

Rooms    | room01  |  roomID : room01
         | room02  |  memberIDs : user1 , user2 , user3
         | room03  |  messageIDs : msg1001 , msg2088 , msg991090

我所知道的:

我可以轻松地从数十亿条消息中提取1条消息
db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
    .getDocuments() { (querySnapshot, err) in

我不知道的东西,我需要知道 :如何获取与“一个房间”相关的所有“消息”

我想要什么:一列1,000条消息,按时间戳排序

例如,room100包含一个messageID数组,最多1000个messageIDs

| room100  |  messageIDs : msg1001 , msg2088 , msg991090 ..... msg9999999

我应该这样取吗?

for a in messageIDs {
      db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
     .getDocuments() { (querySnapshot, err) in ......
   }
 }

我想不是,这会创建多个1,000个并行线程。 我无法预测哪个节点将首先完成,最终结果将是无序的消息数组

还是我应该这样获取它? 嵌套请求,用于完整排序的消息

db.collection("Messages").whereField("roomID", isEqualTo: "msg1001")
         .getDocuments() { (querySnapshot, err) in 

           db.collection("Messages").whereField("roomID", isEqualTo: "msg1002")
     .getDocuments() { (querySnapshot, err) in 

       db.collection("Messages").whereField("roomID", isEqualTo: "msg1003")
     .getDocuments() { (querySnapshot, err) in 

       *....... and so on , 1000 nested requests*
     }
   }
  }
 }
}

获取,验证和比较多个groupID的正确方法是什么????????????????

0 个答案:

没有答案