500k kullanıcılarına sahip bir web sitem var (SQL Server 2008'de çalışıyor). Şimdi kullanıcıların ve arkadaşlarının etkinlik akışlarını dahil etmek istiyorum. SQL Server'da birkaç şeyi test ettikten sonra, RDMS'nin bu tür bir özellik için iyi bir seçim olmadığı anlaşılmaktadır. Bu yavaş (verilerimi ağırlaştırılmış olsa bile). Diğer NoSQL çözümlerine baktıktan sonra bunun için MongoDB'yi kullanabileceğimi düşündüm. activitystrea.ms json specifications for activity stream Tabanlı Veri Yapısını Takip Edeceğim Bu yüzden sorum şu: MongoDB'deki aktivite akışı için en iyi şema tasarımı ne olurdu (bu çok kullanıcı ile çok ağır olacağını tahmin edebilirsiniz) yazıyor, bu yüzden MongoDB tercihim - bu harika "yazma" performansına sahip. Ben 3 yapı türü hakkında düşündüm, bu mantıklı veya başka şema desenleri kullanmalıyım lütfen söyle lütfen.MongoDB veritabanı şeması tasarımı
1 - Her birini depolayın Bu desendeki tüm arkadaşlar/takipçiler ile etkinlik:
{ _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), consumers:[ person3, person4, person5, person6, ... so on ] }
2 - İkinci dizayn: Collectio Bu yaklaşım başka bir koleksiyonunda etkinlik öğeleri ve tüketicileri deposu olacağını -
{ _id:'activ_fanout_123', personId:person3, activities:[ { _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), } ],[ //activity feed 2 ] }activity_stream_fanout n name-. faaliyetleri olarak, böyle bir belge olabilir:
{ _id: "123", actor: { person: "UserABC" }, verb: "follow", object: { person: "someone_else" }, updatedOn: Date(...) }
Ve sonra, takipçileri için, aşağıdaki "bildirimleri" belgeleri olurdu: Cevaplarınız ölçüde
{ activityId: "123", consumer: "someguy", updatedOn: Date(...) } { activityId: "123", consumer: "otherguy", updatedOn: Date(...) } { activityId: "123", consumer: "thirdguy", updatedOn: Date(...) }
takdir edilmektedir.
harika öneriler. Gerçek zamanlı olarak, bir sonraki adımı kastetmedim, gerçek zamanlı olarak, hızlı bir şekilde, senaryo 2'deki çoklu kullanıcı faaliyetlerini OP'den 'harmanlama' olmaktan çok kazanamayacağımı söyledim. Sonra tekrar “fanout” terimini bilmiyorum (OP'nin ikinci seçeneğine atıfta bulunuyorsunuz ve siz de bahsediyorsunuz), bu yüzden 2'nin niyetlerini tam olarak anlayamamış olabilirim. .. Btw: Bu blogpost okumak için, her zaman MongoDB Schema tasarım –
büyük okuma, mimari mesajları görmek için iyi gidiyor Okumak isteyebileceğiniz ilgili bir soru ile blogunuzda bir yorum yaptı ettik. Teşekkürler –
Çocuklar, önerileriniz için çok teşekkürler. Anlam olarak mnemosyn mesajını cevap olarak işaretliyorum. Blogunuzu okuyup nereye götüreceğimi göreceğim. Yine, tüm önerileriniz için bir kayıt teşekkürler. –