緩存大量小文件?Redis是首選!
現(xiàn)在有3KW的數(shù)據(jù),單條數(shù)據(jù)都很小的,如果按key-value來看的話,key就是32位的MD5字符串,value按平均算大概是100字節(jié)左右。
現(xiàn)在需要將這些數(shù)據(jù)做緩存以在高并發(fā)的時候依然可以快速響應(yīng)。
因為這些數(shù)據(jù)基本沒有冷熱數(shù)據(jù)之分,所以需要將全部數(shù)據(jù)都放到緩存中。
1、直接生成靜態(tài)文件,利用nginx對靜態(tài)文件的高效做靜態(tài)緩存。
- 當(dāng)時服務(wù)器硬件資源有限,所以就采用這種方式,一直源用至今。
- 服務(wù)器間通過NFS來共享
- 太多小文件,不方便管理
- NFS不方便運維與擴展
- 文件內(nèi)容很小(100字節(jié)左右),3KW大概就是2.5G大小左右
- 不過文件存儲的時候和硬盤分區(qū)的族大小有關(guān),在這里磁盤分區(qū)的族大小為8K,所以盡管文件內(nèi)容只有100字節(jié),但是實際存儲到磁盤上的時候單個文件其實是8K
- 所以3KW的文件世界占的磁盤空間大約為:200G左右(嚴(yán)重浪費空間啊)
2、Redis(V2.2.11)【KV數(shù)據(jù)庫】
- 聽同事說開啟VM會使性能急劇下降,所以基本無視VM,數(shù)據(jù)全放內(nèi)存。
- key為32位MD5字符串
- 測試數(shù)據(jù):10W數(shù)據(jù)大概占內(nèi)存20M
- 測試數(shù)據(jù):500W數(shù)據(jù)大概占內(nèi)存1G,持久化的rdb數(shù)據(jù)文件大概350M
- 推算3KW數(shù)據(jù):內(nèi)存6G,持久化的rdb數(shù)據(jù)文件大概為2G(壓縮了?)
- 因為Redis在持久化的時候內(nèi)存會加倍,和考慮到數(shù)據(jù)的增長,所以需要1臺20G內(nèi)存的機器基本就沒問題了(容災(zāi)啥的另算)。
- Redis非常快,如果硬件條件沒問題,基本選這個***了。
3、Moosefs(MFS)【分布式文件存儲系統(tǒng)】
- mfs支持NFS的方式mount到本地直接操作(如使用mfs,則現(xiàn)在的架構(gòu)基本不用改)
- 最基本的需要一臺主控服務(wù)器(Master Server)、一臺數(shù)據(jù)服務(wù)器(Chunk Server)
- 文件和目錄的索引需要全部加載到主控服務(wù)器的內(nèi)存中,所以對主控服務(wù)器的內(nèi)存有一定的要求
- 寫入30W文件,到20W的時候?qū)懭刖烷_始下降得厲害了(我的5400轉(zhuǎn)的筆記本硬盤)
- 30W文件,4W目錄,主控服務(wù)器占用大概120M內(nèi)存
- 文件存儲方式貌似和普遍的文件一樣單個存儲的(不確定),30W文件大概占了2.4G的磁盤空間(同樣是8K一個文件)。
- 小文件一樣很多,不方便維護與遷移(不知是否我設(shè)置不對?)。
- 內(nèi)存、硬盤都占用得比較多,而且性能相對來說不是很出眾。
- 所以這個基本不考慮了。
作者:QLeelulu 出處:http://QLeelulu.cnblogs.com/
【編輯推薦】