Mesaj uygulamasının işlenmesi için iyi bir belge yapısı hakkında düşünmeyi düşünüyorum. (farklı kişiler veya kişileri grupları içeren)MongoDB Mesaj uygulaması için Yapı
- kullanıcı (kullanıcı adı, e-posta, şifre vb)
- kişiler listesi:
Temelde nesnelerin üç (veya dört) türleri gerek
- konuşma
- mesajı (mesaj gövdesi, bazı zaman damgası ve yaratıcısı içerir.) (a konuşma bazı kişiler arasında mesajların bir koleksiyon)
Benim fikrim kullanıcı belgeye kişileri gömmek için ve bir konuşma belgede mesajları gömmek oldu:
1. Kullanıcı
{
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. Konuşma
{
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' }
]
}
Bu şema hakkında ne düşünüyorsunuz?
Her belgenin farklı güncelleme sıklığı olduğu için, bunların ayrılmasının daha iyi olacağına inanıyorum (böylece her belge kendi başına). o
Selamlar
bir MongoDB şema görünüyor kendi başına “kötü”, “iyi” ya da. Yapacağınız sorguları ve güncellemeleri detaylandırmanız gerekiyor. Ancak o zaman verilen bir şemanın bu operasyon modellerine uygun olup olmadığını değerlendirebilirsiniz. –
Ayrıca, veri boyutlarının dağılımını da tahmin etmelisiniz, ör .: sohbetin ortalama olarak maksimum kaç mesaj içereceği? Gömmek istiyorsanız bu önemli olabilir. –
Tamam, bunu aklımda tutacağım. Örneğin, redis ile mesajları önbelleğe almak ve oturum bittiğinde hepsini mongo'ya kaydetmek daha yaygın bir yaklaşım mıdır? "Yapılandırılmamış" bir nesneye çok fazla yazma eylemi gerçekleştirme konusunda biraz emin değilim. –