Un problema di progettazione molto semplice. Dì che voglio costruire Facebook Messenger. Diciamo che John e Marry stanno chattando, che è un approccio migliore?MongoDB: miglior design per l'app di messaggistica
1) 1 documento per ogni conversazione, messages
è un array di oggetti messaggio
{ participants: ['john', 'marry'],
messages: [
{ sender: 'john', content: 'howdy', time_created: new Date() },
{ sender: 'marry', content: 'good u', time_created: new Date() },
...
]
}
2) 1 documento per messaggio
{ 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
....
Quale approccio ha una migliore performance in termini di inserire un nuovo messaggio (aggiornare una conversazione e creare un nuovo documento)?
oppure esiste un approccio migliore (come nel mio secondo approccio, non sono sicuro se è un buon progetto specificare il campo partecipanti in ciascun documento)?
Grazie!
L'aggiornamento di 2 raccolte su ogni nuovo messaggio è un sacco di scrittura del database? –
Si aggiornerebbe solo la raccolta di messaggi per ogni nuovo messaggio. La raccolta di conversazioni viene creata/aggiornata solo quando vi sono nuovi partecipanti o quando inizia una nuova conversazione. La tua applicazione può conservare l'id della conversazione (proprio come una sessione). –
ma se non aggiorni la raccolta di conversazioni su ogni nuovo messaggio (per memorizzare l'ultima ora aggiornata), come recupereresti tutta la conversazione ordinata dal più recente al meno recente, quando un utente apre l'app? –