資料庫怎麼支援資料無限增長?(長期更新)

2022-05-27 13:45:11 字數 642 閱讀 1891

可擴充套件是伺服器開發的乙個重要的問題。

乙個系統的可擴充套件包括好幾個方面,在我看來,資料庫可擴充套件幾乎是其中最重要的乙個了。

主要體現在兩方面,1. io可擴充套件,iops要跟得上業務的需求,2.儲存可擴充套件。

問題1:假設我有張使用者道具表,使用者不斷增加,每個人有n個道具(n有上限,100個),平均n值為50,db要怎麼支援?

如果我用mysql,要怎麼做,單錶承受不了吧?如果我用mongodb,要怎麼做, 單個collection夠不夠?

答:如果使用mysql,兩個方案,如果uid為自增id,那麼可直接按號段範圍分表,每n個使用者一張表,如果uid非自增而是一些字元之類的,那麼crc32(uid) % x,x即為分表個數。

問題2:如果問題1裡面的n是無限的?

答:這個就麻煩了,我首選mongodb,單個文件有16mb的上限,假設我們只使用10mb,單個道具占用空間為id+cnt,共16位元組,那麼單個文件可以儲存655360個道具,

雖然問題裡的n是無限,但現實不太可能達到65w這麼多。

如果真有這麼多,怎麼辦?手工的分buck,每個文件為乙個buck,buck有個id(1,2,..),個數,道具特別多的人,可以有好幾個buck。

更新2019.8.21

近來研究db比較多,看了innodb內部實現的文章,

資料庫id自增長

1.建立序列 create sequence create sequence innerid minvalue 1 maxvalue 99999999999999 start with 1 increment by 1 cache 20 order 2.innerid.currval 指當前序列 i...

Infor Syteline 資料庫增長月報表

公司erp系統,需求乙份資料庫大小增長月報表,每月1號傳送郵件至訂閱者的郵箱,下圖右下角的chart是動態產生,有關漸變,可以參考這篇 另外由於磁碟空間太大,加上當前的erp儲存量小,為了顯示圖例效果,insus.net使用千分比。分享右下角圖表 asp gridview id gridviewer...

資料庫繫結TreeView,無限層級

初始化樹 private void inittreeview this.roletree.nodes.add node getchildnode roleauthoritylist,authorityinfolist,node 遞迴方法獲取子型別 private void getchildnode ...