現在有3KW的資料,單條資料都很小的,如果按key-value來看的話,key就是32位的MD5字串,value按平均算大概是100位元組左右。
現在需要將這些資料做緩衝以在高並非的時候依然可以快速響應。
因為這些資料基本沒有冷熱資料之分,所以需要將全部資料都放到緩衝中。
1、直接產生靜態檔案,利用nginx對靜態檔案的高效做靜態緩衝。
- 當時伺服器硬體資源有限,所以就採用這種方式,一直源用至今。
- 伺服器間通過NFS來共用
- 太多小檔案,不方便管理
- NFS不方便營運與擴充
- 檔案內容很小(100位元組左右),3KW大概就是2.5G大小左右
- 不過檔案儲存體的時候和硬碟分區的族大小有關,在這裡磁碟分割的族大小為8K,所以儘管檔案內容只有100位元組,但是實際儲存到磁碟上的時候單個檔案其實是8K
- 所以3KW的檔案世界占的磁碟空間大約為:200G左右(嚴重浪費空間啊)
2、Redis(V2.2.11)【KV資料庫】
- 聽同事說開啟VM會使效能急劇下降,所以基本無視VM,資料全放記憶體。
- key為32位MD5字串
- 測試資料:10W資料大概占記憶體20M
- 測試資料:500W資料大概占記憶體1G,持久化的rdb資料檔案大概350M
- 推算3KW資料:記憶體6G,持久化的rdb資料檔案大概為2G(壓縮了?)
- 因為Redis在持久化的時候記憶體會加倍,和考慮到資料的增長,所以需要1台20G記憶體的機器基本就沒問題了(容災啥的另算)。
- Redis非常快,如果硬體條件沒問題,基本選這個最好了。
3、Moosefs(MFS)【分布式檔案儲存體系統】
- mfs支援NFS的方式mount到本地直接操作(如使用mfs,則現在的架構基本不用改)
- 最基本的需要一台主控伺服器(Master Server)、一台資料服務器(Chunk Server)
- 檔案和目錄的索引需要全部載入到主控伺服器的記憶體中,所以對主控伺服器的記憶體有一定的要求
- 寫入30W檔案,到20W的時候寫入就開始下降得厲害了(我的5400轉的筆記本硬碟)
- 30W檔案,4W目錄,主控伺服器佔用大概120M記憶體
- 檔案儲存體方式貌似和普遍的檔案一樣單個儲存的(不確定),30W檔案大概佔了2.4G的磁碟空間(同樣是8K一個檔案)。
- 小檔案一樣很多,不方便維護與遷移(不知是否我設定不對?)。
- 記憶體、硬碟都佔用得比較多,而且效能相對來說不是很出眾。
- 所以這個基本不考慮了。