如何構建千萬級用戶的後台資料庫?


有一個千萬級別用戶應用的架構設計歌謠,供參考:http://www.mysqlops.com/2011/04/08/%E5%8D%83%E4%B8%87%E7%BA%A7%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E8%AF%80%E7%AA%8D.html

千萬級別用戶的後台資料庫設計:

1.一定要區分業務類型,描述為千萬級別用戶的應用可能:電子商務、SNS平台、SNS遊戲、IM及時通信軟體等;

2.每天的日活躍量大概多少用戶,若是網站還需要加入其他參數:PV,UV等參數輔助決策;

3.不同的業務其對數據操縱不一樣,要大致明白自己的應用:讀寫比如關係,也即:SELECT:UPDATE:DELETE:UPDATE=?;

4.必須考慮一些功能藉助Cache等技術進行一些特殊處理或折中,使投入產出比率協調;

5.若是使用MySQL作為後台資料庫提供服務,建議盡量使SQL簡潔,不是說不用JOIN,而是要考慮MySQL對JOIN實現的演算法:Nested loop join優缺點;

6.資料庫結構設計


6.1 資料庫的設計開始之前,必須優先進行業務的數據流梳理(注釋:必須盡量考慮應用所有可能的功能模塊),以及對業務優先進行優化和規劃,然後根據數據流和功能 考慮資料庫的結構設計和優化;

6.2 千萬級別用戶量,若是非遊戲行業的產品(SNS遊戲除外),建議考慮用戶數據拆分架構設計,以及考慮後續未來1-2年的承受量,若是SNS平台必須考慮拆分,除非考慮上SSD+Fusion-io、存儲等更高端的設備,用錢換時間的方式支持一段時間再說;

6.3 數據拆分的核心與難處:同一個用戶的數據盡量放一起(拆分規則要盡量簡單可執行),拆分之後用戶關係的數據如何保存的抉擇有多種(存2份或存1份放一個地方),難處數據的分頁,統計合併等;

6.4 必須有考慮一些冗餘的方式解決SQL性能的問題,但是又不過多引入冗餘IO,冗餘欄位盡量要是整型欄位;

6.5 資料庫設計過程中,對於索引組織結構要偏向 應用外部用戶級別的操作 性能優先,部分內部的操作盡量隔離的做法,例如:搜索引擎Build操作、內部編輯團隊審核等操作

6.6 資料庫的設計必須考慮使用什麼機器類型,內存多少、CPU、硬碟(這個是關鍵:多少塊盤、轉速、容量,以及做RAID幾),RAID卡內存也需要考慮進去,必須結合數據量進行一個預算規劃.........不一定超準確,但是要八九不離十.

先寫這麼多了,很多東西需要結合實際業務去再細化...

花點時間整理成一篇文章,請查閱:http://www.mysqlops.com/2011/11/22/database-arc.html


做好技術儲備,沉澱實施經驗,兵來將擋,水來土掩,別書到用時方恨少。


區分冷熱,分庫分表,隊列緩存,就這幾板斧,關鍵在用的位置和力度,這就看經驗了。


首先,你需要有千萬個用戶。

5年了,沒猜錯的話,你已經忘記這個項目了。

如果我沒猜錯的話,你的項目不是想改變世界就是類似傳銷。。。。。。


可參考淘寶共享出的mysql資料 首頁 - 淘寶資料庫研發組


推薦閱讀:

哪些在操作系統架構設計上的良好方法可以應用在「企業的OS」的設計上?多謝!
Intel會收購Altera嗎?
實時處理系統(類似s4, storm)對比直接用MQ來做好處在哪裡?
端游、手游服務端常用的架構是什麼樣的?

TAG:資料庫 | 架構 | 用戶量 |