我有一個擁有500k用戶的網站(運行在sql server 2008上)。我想現在包括用戶和他們的朋友的活動流。在SQL Server上測試一些東西之後,很明顯RDMS不是這種功能的好選擇。它很慢(即使我對數據進行了嚴重的非規範化處理)。所以在看過其他的NoSQL解決方案後,我發現我可以使用MongoDB。我將根據以下數據結構activitystrea.ms json specifications for activity stream 所以我的問題是:什麼是最好的MongoDB中的活動流模式設計(有很多用戶,你幾乎可以預測它會很沉重我寫了MongoDB - 它有很好的「寫入」性能,我想過3種類型的結構,請告訴我這是否合理,或者我應該使用其他模式模式。與此模式中的所有朋友/追隨者進行的活動:MongoDB數據庫模式設計
{ _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), consumers:[ person3, person4, person5, person6, ... so on ] }
2 - 第二個設計:Collectio ñ名稱 - activity_stream_fanout
{ _id:'activ_fanout_123', personId:person3, activities:[ { _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), } ],[ //activity feed 2 ] }
3 - 這種方法將存儲在一個集合的活動項目,而在另一個消費者。在活動中,你可能有這樣一個文件:
{ _id: "123", actor: { person: "UserABC" }, verb: "follow", object: { person: "someone_else" }, updatedOn: Date(...) }
,然後跟隨者,我有以下的「通知」文件:
{ activityId: "123", consumer: "someguy", updatedOn: Date(...) } { activityId: "123", consumer: "otherguy", updatedOn: Date(...) } { activityId: "123", consumer: "thirdguy", updatedOn: Date(...) }
你的答案是極大的讚賞。
很棒的建議。實時我並不是指亞秒,我只是意味着實時速度足夠快,以至於從OP中場景2中的多個用戶活動的「批處理」中獲益不大。然後我再次對「扇出」這個詞不太熟悉(OP的第二個選項似乎指的是,你也提到),所以我可能完全不瞭解2的意圖。 ..順便說一句:要閱讀該博客帖子,總是很高興看到關於MongoDB架構設計的架構設計 –
很棒的閱讀,我在您的博客上留下了一條評論,提供您可能想要閱讀的相關問題。謝謝 –
夥計們,非常感謝您的建議。我將@mnemosyn帖子標記爲答案,因爲它確實有道理。我會讀你的博客,看看我的需求。再次感謝日誌中的所有建議。 –