緩存大量小文件?Redis是首選!
作者:QLeelulu
緩存文件,我們可以選擇用Web、文件系統或數據庫來做,比如本文中列出的Nginx、MooseFS以及Redis。作者需要將3KW條小數據做緩存以在高并發的時候依然可以快速響應,于是比較了這三種方式做緩存的優劣,結論是Redis最合適。
現在有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一個文件)。
- 小文件一樣很多,不方便維護與遷移(不知是否我設置不對?)。
- 內存、硬盤都占用得比較多,而且性能相對來說不是很出眾。
- 所以這個基本不考慮了。
作者:QLeelulu 出處:http://QLeelulu.cnblogs.com/
【編輯推薦】
責任編輯:yangsai
來源:
cnblogs































