我正在使用聊天应用程序。我的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的正确方法是什么????????????????