標籤:
MongoDB系列教程(八):GridFS儲存詳解
GridFS簡介
mongoDB的文檔以BSON格式儲存,支援二進位的資料類型,當我們把二進位格式的資料直接儲存到mongoDB的文檔中。但是當檔案太大時,例片和視頻等檔案,每個文檔的長度是有限的,於是mongoDb會提供了一種處理大檔案的規範--GridFS。
GridFS實現原理
在GridFS資料庫中,預設使用fs.chunks 和fs.files來隱藏檔,其中fs.files集合存放檔案的資訊,fs.chunks存放檔案的資料,一個fs.files集合中的一條記錄內容如下,即一個file資訊如下所示:
{ "_id" : ObjectId("4f4608844f9b855c6c35e298"), //唯一id,可以是使用者自訂的類型 "filename" : "CPU.txt", //檔案名稱 "length" : 778, //檔案長度 "chunkSize" : 262144, //chunk的大小 "uploadDate" : ISODate("2012-02-23T09:36:04.593Z"), //上傳時間 "md5" : "e2c789b036cfb3b848ae39a24e795ca6", //檔案的md5值 "contentType" : "text/plain" //檔案的MIME類型 "meta" : null //檔案的其它資訊,預設是沒有”meta”這個key,使用者可以自己定義為任意BSON對象 }
對應fs.chunks中的chunk(中文意思資料區塊),如下所示:
{ "_id" : ObjectId("4f4608844f9b855c6c35e299"), //chunk的id "files_id" : ObjectId("4f4608844f9b855c6c35e298"), //檔案的id,對應fs.files中的對象,相當於fs.files集合的外鍵 "n" : 0, //檔案的第幾個chunk塊,如果檔案大於chunksize的話,會被分割成多個chunk塊 "data" : BinData(0,"QGV...") //檔案的位元據,這裡省略了具體內容 }
預設大小是256k,所以把檔案存入到GridFS過程中,如果檔案大於chunksize,則把檔案分割多個chunk,再把這些chunk儲存在fs.chunks中,最後再把檔案資訊存入fs.files中。
在讀取檔案的時候,先根據查詢的條件,在fs.files中找到一個合適的記錄,得到“_id”的值,再根據這個值到fs.funks中尋找所有files_id 為 _id 的chunk,並按照“n”排序,最後依次讀取chunk中的“data”對象的內容,還原成原來的檔案。
註:
1、GridFS不自動處理md5相同的檔案,對於md5相同的檔案,如果想在GridFS中只有一個儲存,要使用者處理,md5值的計算由用戶端完成。
2、因為GridFS在上傳檔案過程中是先把檔案資料儲存到fs.chunks,最後再把檔案的資訊儲存到fs.files中,所以如果上傳檔案過程中失敗,有可能在fs.chunks中出現垃圾資料,這些垃圾資料,可以定期清理掉。
參考來源:
MongoDB系列教程(八):GridFS儲存詳解
http://www.lai18.com/content/409594.html
延伸閱讀
《MongoDB技術知識》系列技術文章整理收藏
1mongoDB入門需要瞭解的基本知識
2MongoDB入門教程(包含安裝、常用命令、相關概念、提示、常見操作等)
3MongoDB入門教程之分區技術詳解
4MongoDB入門教程之常用的營運技術介紹
5MongoDB入門教程之C#驅動操作執行個體
6MongoDB入門教程之主從複製配置詳解
7MongoDB入門教程之彙總和遊標操作介紹
8MongoDB入門教程之細說MongoDB資料庫的增刪查改操作
9MongoDB入門教程之索引操作淺析
10MongoDB入門教程之Windows下的MongoDB資料庫安裝圖解
11MongoDB查詢欄位沒有建立索引導致的連線逾時異常解案例分享
12MongoDB記錄檔過大的解決方案
13MongoDB社區版和企業版的差別對照表
14MongoDB中文社區發起人帶你學習mongoDB
15對MongoDB資料庫效能瓶頸分析
16MongoDB 分頁查詢的方法及效能
17MongoDB分區儲存的叢集架構實現
18Mongodb大量刪除gridfs檔案執行個體
19Mongodb增加、移除Shard Server執行個體
20Mongodb增加、移除Arbiter節點執行個體
21CentOS系統下MongoDB安裝及配置教程
22MongoDB修改、刪除文檔的域屬性執行個體
23Python中的MongoDB基本操作:串連、查詢執行個體
24MongoDB匯出查詢結果到檔案例子
25MongoDB中建立索引需要注意的事項
26MongoDB中的一些坑(最好不要用)
27給MongoDB添加使用者權限方法分享
28Linux系統下MongoDB的簡單安裝與基本操作
29MongoDB教程之基本管理命令
30MongoDB教程之彙總(count、distinct和group)
31MongoDB教程之索引介紹
32MongoDB教程之資料操作執行個體
33MongoDB教程之入門基礎知識
34MongoDB教程之查詢操作執行個體
35MongoDB系列教程(四):設定使用者存取權限
36MongoDB系列教程(八):GridFS儲存詳解
37MongoDB資料庫的特色和優點介紹
38MongoDB簡介 MongoDB五大特色
39MongoDB系列教程(六):java操作mongodb執行個體
40MongoDB系列教程(七):MongoDb資料結構詳解
41MongoDB系列教程(五):mongo文法和mysql文法對比學習
42MongoDB系列教程(二):MongoDB簡介
43MongoDB系列教程(一):NoSQL起源
44MongoDB中的MapReduce簡介
45MongoDB系列教程(三):Windows中下載和安裝MongoDB
46淺談MongoDB的備份方式
47MongoDB 常用命令總結
48MongoDB與MySQL的操作對比表及區別介紹
49MongoDB安全配置詳解
50MongoDB中的bson介紹和使用執行個體
MongoDB系列教程(八):GridFS儲存詳解