MongoDB系列教程(八):GridFS儲存詳解

來源:互聯網
上載者:User

標籤:

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儲存詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.