MongoDB(四)——GridFS
GridFS
MongoDB的一個(gè)重要子模塊,可基于MongoDB來(lái)持久存儲(chǔ)文件,并且支持分布式存儲(chǔ)和讀取。
持久存儲(chǔ):對(duì)應(yīng)瞬時(shí)數(shù)據(jù)如內(nèi)存,指保存到數(shù)據(jù)庫(kù)中,能持久保存。
分布式存儲(chǔ):將數(shù)據(jù)分散地存儲(chǔ)于多個(gè)位置。
存在的意義
MongoDB采用BSON格式存儲(chǔ)數(shù)據(jù),對(duì)數(shù)據(jù)的大小限制為16M,但是在實(shí)際的系統(tǒng)開發(fā)中,上傳的圖片或文件可能尺寸會(huì)很大,此時(shí)可以使用MongoDB中的GridFS解決,通常用來(lái)處理大文件的存儲(chǔ)。
存儲(chǔ)原理
GridFS使用兩個(gè)集合來(lái)存儲(chǔ)文件:
- fs.chunks:存儲(chǔ)文件的二進(jìn)制數(shù)據(jù)(一個(gè)文件有一到多條數(shù)據(jù))
- fs.files:存儲(chǔ)文件的元數(shù)據(jù)(一個(gè)文件只有一條數(shù)據(jù))
元數(shù)據(jù):用來(lái)描述數(shù)據(jù)的數(shù)據(jù),如數(shù)據(jù)大小、創(chuàng)建時(shí)間、文件名、格式類型等。
存儲(chǔ)數(shù)據(jù)
當(dāng)一個(gè)文件存儲(chǔ)到GridFS時(shí),如果文件大于chunksize(一個(gè)chunk的大小,256KB),會(huì)將文件按照chunk的大小分割成多個(gè)chunk塊,最終將chunk塊的信息存儲(chǔ)在fs.chunks集合的多個(gè)文檔中,然后將文件信息存儲(chǔ)在fs.files集合的唯一一份文檔中。
讀取文件
先根據(jù)查詢條件在fs.files集合中找到對(duì)應(yīng)的文檔,得到_id字段,在查詢對(duì)應(yīng)fs.chunks集合中所有files_id和_id相同的文檔,最后根據(jù)n字段的順序讀取chunk的data字段二進(jìn)制數(shù)據(jù),還原文件。
使用GridFS
mongofiles是GridFS的實(shí)用工具,用于管理GridFS文件,在MongoDB安裝目錄下的bin目錄中,可在命令行直接使用。
上傳文件mongogiles put 文件名
生成的fs.files:
生成的fs.chunks:(我上傳的file.mov共750KB,分成了3個(gè)chunk)
列出文件mongofiles list
下載文件mongofiles get 文件名
刪除文件mongofiles delete 文件名
- GridFS詳述
- Node.js中使用GridFS
總結(jié)
以上是生活随笔為你收集整理的MongoDB(四)——GridFS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 编程热情的维系
- 下一篇: 深耕“有效私域”,雀巢集团携手腾讯重塑零