MongoDB應用3——大文件存儲

1秸弛、概述

? ????? GridFS是基于mongodb存儲引擎是實現(xiàn)的“分布式文件系統(tǒng)”医咨,底層基于mongodb存儲機制构舟,和其他本地文件系統(tǒng)相比灰追,它具備大數(shù)據(jù)存儲的多個優(yōu)點堵幽。GridFS適合存儲超過16MB的大型文件,不過16M數(shù)據(jù)在當今互聯(lián)網(wǎng)時代弹澎,已經(jīng)不足為奇朴下。我們可以使用GridFS構(gòu)建大規(guī)模的“圖片服務器”、“文檔服務器”苦蒿、“視頻殴胧、音頻”文件服務器,GridFS對于web應用佩迟,可以結(jié)合nginx插件“ningx-gridfs”能夠簡單的實現(xiàn)負載均衡等特性团滥,非常便捷;可以簡單認為GridFS是為web應用而生报强。個人認為灸姊,目前架構(gòu)比較簡單的NoSQL文件系統(tǒng)中GridFS是最優(yōu)秀的。

? ? ????GridFS并不是將單個文件直接存儲為一個document秉溉,而是將文件分成多個parts或者說chunks力惯,然后將每個chunk作為作為一個單獨的document存儲,然后將chunks有序保存召嘶。默認情況下父晶,GridFS的chunk大小位255k。GridFS使用2個collections來存儲這些文件弄跌,一個collection存儲文件的chunks(實際文件數(shù)據(jù))甲喝,另一個則存儲文件的metadata(用戶自定義的屬性,filename铛只,content-type等)俺猿。

? ????? 當用戶查詢GridFS中的文件時,客戶端或者driver將會重新按序組裝這些chunks格仲。用戶可以range查詢文件押袍,也可以獲取文件的任意部分的信息,比如:跳過(skip)視頻或者音頻(任何文件)的中間部凯肋,實現(xiàn)“range access of single file”谊惭。

????????對于mongodb而言,每個document最大尺寸為16M侮东,如果想存儲一條數(shù)據(jù)(比如一個文件)超過16M圈盔,那么只能使用GridFS支持;GridFS可以支持單個文件尺寸達到數(shù)G悄雅,讀取文件時可以分段讀取驱敲。此外,GridFS可以從Mongodb的高性能宽闲、高可用特性中獲益众眨,比如我們可以在“replica set”或者“sharding”架構(gòu)模式下使用GridFS握牧。

2、使用場景

????????document的大小超過16M是使用GridFS的條件之一娩梨,因為mongodb普通的collection無法支持16M以上的document沿腰,我們不得不選擇其他方案;在一些情況下狈定,將這些大文件存儲在GridFS中颂龙,比直接存儲在本地文件系統(tǒng)中更加適合:

????????1)如果你的文件系統(tǒng)對每個目錄下文件的個數(shù)有限制(或者太多,將會影響文件的打開速度等)纽什。

????????2)如果你的文件數(shù)據(jù)措嵌,有分數(shù)據(jù)中心鏡像保存(大數(shù)據(jù)情況,可用性保證)芦缰。

????????3)如果你希望訪問一個超大的文件企巢,而不希望將它全部加入內(nèi)存,而是有“range access”的情況饺藤,即分段讀取包斑,那么GridFS天生就具備這種能力流礁,你可以隨意訪問任意片段涕俗。

? ? 對于一個大文件,如果你希望原子性的更新它的全部內(nèi)容神帅,那么GridFS將不適合再姑;比如同時更新一個文件的多個chunk,因為mongodb本身沒有事務機制找御。

????????對于小于16M的文件元镀,比如一些圖片、CSS霎桅、js文件等栖疑,應該將它們直接存儲在普通的collection中而非GridFS(bindata,參見org.bson.types.Binary)滔驶,因為它們通常較小遇革,GridFS無法發(fā)揮其優(yōu)勢。當然揭糕,你為了統(tǒng)一application的“文件系統(tǒng)”存儲方式萝快,也可以將這些小文件保存在GridFS中,性能也不會差的太多著角,為了提升性能揪漩,對這些小文件,可以在存儲時手動設置它的chunkSize吏口,避免文件被切分成多個chunks來提高性能奄容。

? ? ? ? 另外冰更,如果你的數(shù)據(jù)庫不用MongoDB,那么不用為了做大文件存儲而選擇MongoDB嫩海,MongoDB畢竟不是專門做分布式文件存儲的冬殃,使用GridFS只不過是為了性能要求不是太高的情況下,統(tǒng)一存儲架構(gòu)而做出的選擇叁怪。專業(yè)的分布式文件存儲最好還是選擇FastDFS审葬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奕谭,隨后出現(xiàn)的幾起案子涣觉,更是在濱河造成了極大的恐慌,老刑警劉巖血柳,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官册,死亡現(xiàn)場離奇詭異,居然都是意外死亡难捌,警方通過查閱死者的電腦和手機膝宁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來根吁,“玉大人员淫,你說我怎么就攤上這事』鞯校” “怎么了介返?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沃斤。 經(jīng)常有香客問我圣蝎,道長,這世上最難降的妖魔是什么衡瓶? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任徘公,我火速辦了婚禮,結(jié)果婚禮上哮针,老公的妹妹穿的比我還像新娘关面。我一直安慰自己,他們只是感情好诚撵,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布缭裆。 她就那樣靜靜地躺著,像睡著了一般寿烟。 火紅的嫁衣襯著肌膚如雪澈驼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天筛武,我揣著相機與錄音缝其,去河邊找鬼挎塌。 笑死,一個胖子當著我的面吹牛内边,可吹牛的內(nèi)容都是我干的榴都。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼漠其,長吁一口氣:“原來是場噩夢啊……” “哼嘴高!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起和屎,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤拴驮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柴信,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體套啤,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年随常,在試婚紗的時候發(fā)現(xiàn)自己被綠了潜沦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡绪氛,死狀恐怖唆鸡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钞楼,我是刑警寧澤喇闸,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布袄琳,位于F島的核電站询件,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唆樊。R本人自食惡果不足惜宛琅,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逗旁。 院中可真熱鬧嘿辟,春花似錦、人聲如沸片效。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淀衣。三九已至昙读,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膨桥,已是汗流浹背蛮浑。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工唠叛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沮稚。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓艺沼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕴掏。 傳聞我的和親對象是個殘疾皇子障般,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349