微博資料庫設計
Ⅰ 新浪微博「點贊功能」資料庫如何設計的
新浪微博「點贊功能」的資料庫設計主要基於以下幾點:
數據分離存儲:
- 每個微博的內容與對應的點贊數被分別存儲,這種設計確保了信息的清晰性和高效管理。微博內容可能存儲在關系型資料庫中,而點贊數則採用更適合高並發讀寫操作的存儲方案。
基於Redis的二次開發計數器:
- 微博點贊功能利用基於Redis的二次開發計數器進行數據存儲。Redis以其高效存儲和優化性能的特性,非常適合處理這種高並發的讀寫操作。
- 在存儲資源管理方面,系統充分利用內存資源,並在接近存儲極限時,自動將最古老的數據轉移至磁碟,以確保數據的連續性和完整性。
緩存與磁碟數據的協同工作:
- 當在Redis緩存中未能找到所需數據時,系統會讀取磁碟數據。但通常這種情況只涉及最舊的數據,因此對系統性能的影響微乎其微。
- 此設計與原生Redis性能保持一致,但能在相同內存條件下存儲更多數據,提高了存儲效率。
開源計數器代碼計劃:
- 新浪微博有計劃將計數器相關的開源代碼提供給有需要的用戶,這有助於其他開發者理解和實現類似的功能。
借鑒前輩經驗與深入學習:
- 在設計與優化計數器功能方面,新浪微博借鑒了前輩的經驗,並通過閱讀相關文章來提升對計數器設計的理解和實踐能力。
綜上所述,新浪微博的「點贊功能」資料庫設計採用了高效的數據分離存儲策略,利用Redis進行高並發讀寫操作,並通過緩存與磁碟數據的協同工作確保數據的完整性和性能。同時,新浪微博還計劃開源相關代碼,並鼓勵開發者借鑒前輩經驗進行深入學習。
Ⅱ 新浪微博「點贊功能」資料庫如何設計的
對於第一個問題,設計一個schema->(messageID,likedCount),記錄每條微博的點贊數。messageID是微博的編號,likedCount是該微博的點贊人數。但是這里有兩個問題需要解決,第一是並發,第二是數據量。
每條微博都有可能有很多人同時點贊,為了保證點贊人數精確就需要保證likedCount++是原子操作,這個可以由應用程序來實現,也可以用redis的事務來實現(如果redis有事務機制或者自增功能的話),但是我覺得為了性能考慮,也可以不用實現原子操作,具體原因就不展開了。
每天都上億可能更多的微博內容產生,這樣就會有上億個新的(messageID,likedCount)生成,這樣的數據量是比較大的,單機資料庫比較難提供高效的服務,所以需要採取sharding的功能(有時候也叫分表分庫),可能根據messageID把這些schema分散到十個或者更多的shards上(據說,sina微博有600個節點,如何三個節點組成一個shard,就有200個shards),這樣每個shard處理的請求就只有原來的十分之一,從而就能提高服務的性能。
關於點贊人列表的設計,一般來說,可能想到的schema是(messageID,userID),但是這樣的設計有一個小問題,就是有些大發的微博可能會得到幾十萬的點贊,這樣就會產生幾十萬個條數據,這樣數據有點多,讀取起來可能也慢。所以可以用這樣一個schema(messageID,partID,userIDs),讓一個messageID對於多個userID,同時比對應太多的userID,所以加入一個新的partID,一個part存1000個userID,這樣幾十萬個點贊,只需要存幾百條數據。這樣做還有一個好處,用戶點擊查看點贊人時的,一般都不是完全顯示所有點贊人,而是一批一批顯示,這樣可以一次只讀一條數據,就可顯示一批點贊用戶信息。
Ⅲ 微博如何使用大數據存儲技術
Mongodb和Redis,Mongodb可以滿足大量數據的存儲,Redis是內存資料庫,適合Key-Value形式的快速讀寫,適合做緩存,佔用內存資源多,不適合存儲大量數據。
微博是近幾年發展得極為火熱的信息發布和分享平台,可以發布微博、分享信息、評論和參與話題的討論。為了讓用戶及時了解到最熱門的話題、最熱門的信息。
需要對微博系統中的數據進行實時處理和分析。而Storm是一個免費開源、分布式的、具有很好容錯性的實時計算系統,通過Storm可以實時處理微博系統中的數據,並根據處理結果向用戶進行實時熱門推送。
微博大數據:
微博其實和淘寶是很類似的。一般來說,第一代架構,基本上能支撐到用戶到 百萬 級別,到第二代架構基本能支撐到 千萬 級別都沒什麼問題,當業務規模到 億級別時,需要第三代的架構。
從LAMP的架構到面向服務的架構,有幾個地方是非常難的,首先不可能在第一代基礎上通過簡單的修修補補滿足用戶量快速增長的,同時線上業務又不能停,這是我們常說的在飛機上換引擎的問題。
建議在做服務化的時候,首先更多是偏向業務的梳理,同時要找准一個很好的切入點,既有架構和服務化上的提升,業務方也要有收益,比如提升性能或者降低維護成本同時升級過程要平滑,建議開始從原子化服務切入,比如基礎的用戶服務, 基礎的短消息服務,基礎的推送服務。
第二,就是可 以做無狀態服 務,後面會詳細講,還有數據量大了後需要做數據Sharding,後面會將。第三代 架構 要解決的 問題,就是用戶量和業務趨於穩步增加(相對爆發期的指數級增長),更多考慮技術框架的穩定性, 提升系統整體的性能,降低成本,還有對整個系統監控的完善和升級。
Ⅳ 微博的系統架構,想用mysql+redis配合使用,想問一下具體要怎麼操作
微博的系統架構,想用mysql+redis配合使用,具體操作步驟:
寫入數據到Redis,,然後在寫個運行cron的腳本,美妙搏游讀內存,並寫入資料庫即可。
使用注意:
1、MySQL使用需要注意的地方:
1) 、存儲引擎選擇InnoDB,在高並發下讀寫有很好的表現;
2)、 數據合理分表分區,均衡各資料庫伺服器的負載;
3) 、適當作數據的冗餘,便於在cache失效時的快速恢復;
2、Redis使用需要注意的地方:
1) 、合理規劃cache;
將訪問量高的熱點數據統計出來、分類稿鍵緩基敬銷存。
2)、 緩存的壓縮;
在高訪問量和高並發下,每一個位元組的減少都是巨大的節省。
3、數據實時性與一致性。