Выбор между иерархической вложенной коллекцией и двумя коллекциями - PullRequest
0 голосов
/ 22 апреля 2019

В традиционной архитектуре JSON чат может быть организован следующим образом:

{
    "chatrooms" : {
        "room1" : {
            "room_owner" : "andy_cap",
            "room_name" : "cartoon_strips"
        },
        "room2" : {
            ...
        }
    },
    "chats" : {
        "chat1" : {
            "speaker" : "...",
            "text" : "...",
            "room" : "room1"
        },
        "chat2" : {
            ...
        }
    }
}

Архитектура Firestore отличается, однако, и рекомендует в соответствии с документацией от Google для встраивания чатовв виде подколлекций в чатах.

let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")

Выбор Firestore имеет много плюсов и минусов по сравнению со старым вариантом базы данных Firebase Realtime, но архитектура сбора / подсборки потенциально означает проблемы с задержкой и ценообразованием,Похоже, что запрос чата приведет к загрузке полного набора чатов в этой комнате, что на самом деле не то, что нужно при настройке чатов для выбора пользователя.

let docRef = db.collection("rooms").document("roomA")

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
        print("Document data: \(dataDescription)")
    } else {
        print("Document does not exist")
    }
}

У кого-нибудь есть предложения по управлению этой иерархией?Есть ли способ, например, загружать только данные чата (владелец, имя и т. Д.) В Firestore и использовать более глубокий запрос, если пользователь решит ввести его и прочитать чаты?

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