Bardzo prosty problem projektowy. Powiedz, że chcę zbudować Facebook Messenger. Powiedzmy, że John i Marry rozmawiają na czacie, co jest lepszym podejściem?MongoDB: najlepszy projekt aplikacji do obsługi wiadomości
1) 1 dokument za rozmowy, messages
jest tablicą wiadomości obiektu
{ participants: ['john', 'marry'],
messages: [
{ sender: 'john', content: 'howdy', time_created: new Date() },
{ sender: 'marry', content: 'good u', time_created: new Date() },
...
]
}
2) 1 dokument za wiadomość
{ participants: ['john', 'marry'], sender: 'john', message: 'howdy', time_created: new Date() } // document 1
{ participants: ['john', 'marry'], sender: 'marry', message: 'good u', time_created: new Date() } // document 2
....
Które podejście ma lepsze osiągi pod względem wstawianie nowej wiadomości (aktualizacja rozmowy lub tworzenie nowego dokumentu)?
czy są jakieś lepsze podejście (jak w moim drugim podejściu, nie jestem pewien, czy to dobry projekt, aby określić pole uczestników w każdym dokumencie)?
Dzięki!
Czy aktualizowanie 2 kolekcji każdej nowej wiadomości wymagałoby dużo zapisu w bazie danych? –
Zaktualizowałbyś tylko kolekcję wiadomości dla każdej nowej wiadomości. Kolekcja konwersacji jest tworzona/aktualizowana tylko wtedy, gdy pojawią się nowi uczestnicy lub rozpocznie się nowa rozmowa. Twoja aplikacja może zachować identyfikator rozmowy (podobnie jak sesja). –
, ale jeśli nie aktualizujesz kolekcji konwersacji przy każdej nowej wiadomości (w celu zachowania ostatniej zaktualizowanej godziny), w jaki sposób pobierzesz całą rozmowę posortowaną od najnowszej do najmniejszej, kiedy użytkownik otworzy aplikację? –