Çok basit bir tasarım problemi. Facebook Messenger'ı kurmak istediğimi söyle. Diyelim ki John ve Marry sohbet ediyor, hangisi daha iyi bir yaklaşım?MongoDB: mesajlaşma uygulaması için en iyi tasarım
1) konuşma başına 1 belge, messages
mesaj nesnesinin bir dizidir
{ participants: ['john', 'marry'],
messages: [
{ sender: 'john', content: 'howdy', time_created: new Date() },
{ sender: 'marry', content: 'good u', time_created: new Date() },
...
]
}
2) yaklaşımı açısından daha iyi bir performansa sahiptir mesaj
{ 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
....
başına 1 belge yeni bir mesaj eklemek (bir konuşmayı güncellemek ve yeni bir belge oluşturmak)?
veya daha iyi bir yaklaşım var mı (2. yaklaşımımda olduğu gibi, her bir dokümanda katılımcı alanını belirtmek için iyi bir tasarım olup olmadığından emin değilim)?
Teşekkürler!
Her yeni mesajda 2 koleksiyon güncellenirken çok fazla veritabanı yazılabilir mi? –
Sadece her yeni mesaj için mesaj koleksiyonunu güncellersiniz. Konuşma koleksiyonu, yalnızca yeni bir katılımcı olduğunda veya yeni görüşme başladığında oluşturulur/güncellenir. Uygulamanız konuşma kimliğini koruyabilir (bir oturum gibi). –
ancak her yeni mesajda (en son güncellenen zamanı depolamak için) konuşma koleksiyonunu güncellemezseniz, bir kullanıcı uygulamayı açtığında en sondan en yakın tarihe kadar olan tüm sohbetleri nasıl alırsınız? –