Проблема проектирования базы данных iOS Firebase: лучший способ создать приложение чата для облачного пожарного депо? - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю с приложением чата.Мое облачное хранилище Firebase выглядит следующим образом:

Сообщения = содержит целые сообщения от всех пользователей, здесь собраны все сообщения с начала выпуска сервиса.Он может содержать 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

Что я не знаю, и мне нужно знать: Как я могу получить все "сообщения", относящиеся к "одной комнате"

Что я хочу: Массив из 1000 сообщений, упорядоченный по отметке времени

например, room100 содержит массив messageIDs, до 1000 messagesID

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

Должен ли я получить это так?

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

Полагаю, нет, это создало бы несколько,1000 параллельных потоков.Я не могу предсказать, какой узел закончил бы первым, я получил бы окончательный результат в виде неупорядоченного массива сообщений

Или я должен получить его вот так?Вложенные запросы для полностью упорядоченных сообщений

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*
     }
   }
  }
 }
}

Как правильно выбрать, проверить и сравнить несколько идентификаторов группы ????????????????

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...