可擴展是服務器開發的一個重要的問題。mysql
一個系統的可擴展包括好幾個方面,在我看來,數據庫可擴展幾乎是其中最重要的一個了。sql
主要體如今兩方面,1. io可擴展,iops要跟得上業務的需求,2.存儲可擴展。mongodb
問題1:假設我有張用戶道具表,用戶不斷增長,每一個人有n個道具(n有上限,100個),平均n值爲50,db要怎麼支持?數據庫
若是我用mysql,要怎麼作,單表承受不了吧?若是我用mongodb,要怎麼作, 單個collection夠不夠?服務器
答:若是使用mysql,兩個方案,若是uid爲自增id,那麼可直接按號段範圍分表,每n個用戶一張表,若是uid非自增而是一些字符之類的,那麼crc32(uid) % x,x即爲分表個數。ui
問題2:若是問題1裏面的n是無限的?服務器開發
答:這個就麻煩了,我首選mongodb,單個文檔有16MB的上限,假設咱們只使用10MB,單個道具佔用空間爲id+cnt,共16字節,那麼單個文檔能夠存儲655360個道具,開發
雖然問題裏的n是無限,但現實不太可能達到65w這麼多。文檔
若是真有這麼多,怎麼辦?手工的分buck,每一個文檔爲一個buck,buck有個id(1,2,..),個數,道具特別多的人,能夠有好幾個buck。io
-----------------------------------------------------
更新2019.8.21
近來研究db比較多,看了innodb內部實現的文章,