Rozmyślam o dobrej strukturze dokumentu do obsługi aplikacji wiadomości.Struktura MongoDB dla aplikacji wiadomości
I w zasadzie potrzebne są trzy (lub cztery) rodzaje obiektów:
- użytkownika (nazwa użytkownika, adres e-mail, hasło, itd.)
- listy kontaktów (zawierających różne kontakty lub grupy kontaktów)
- rozmowa (rozmowa jest zbiorem komunikatów między niektórych osób)
- komunikatu (zawiera treść wiadomości, niektóre datownik i twórca.)
Mój pomysł był aby osadzić kontakty do dokumentu użytkownika i osadzić wiadomości w dokumencie konwersacji:
1. użytkownik
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', // used for unique constraints
email: '[email protected],
emailCanonical: '[email protected],
salt: 'some hash',
password: 'hash with salt',
logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
state: { online: true, available: false },
contacts: [ user_id1, user_id2, user_id3 ]
}
2. Rozmowa
{
members: [ user_id1, user_id2 ],
messages: [
{ author: user_2, body: 'Hi what's up' },
{ author: user_1, body: 'Nothing out here :(' },
{ author: user_2, body: 'Whanna ask some question on stackoverflow' },
{ author: user_1, body: 'Okay, lets go' }
]
}
Co sądzisz o tym schemacie?
Myślę, że lepiej byłoby je oddzielić (więc każdy dokument jest taki sam), ponieważ każdy dokument ma inną częstotliwość aktualizacji. Ale ja naprawdę nie mam żadnego doświadczenia na ten temat, więc dobrze byłoby usłyszeć kilka rad :)
Pozdrowienia
schematu MongoDB nigdy nie jest „dobre” lub „złe” sam. Musisz szczegółowo określić zapytania i aktualizacje, które zamierzasz wprowadzić. Tylko wtedy możesz ocenić, czy dany schemat pasuje do tych schematów operacji. –
Należy również oszacować rozkład rozmiarów danych, np .: ile wiadomości konwersacja będzie zawierała średnio? Może to być ważne, jeśli chcesz osadzić. –
OK, będę o tym pamiętać. Czy jest to typowe podejście do pamięci podręcznej, na przykład wiadomości z redis, a następnie zapisać je wszystkie do mongo po zakończeniu sesji? Nie jestem pewien co do wykonywania wielu akcji zapisu do obiektu "nieustrukturyzowanego". –