MongoDB 第6章 MongoDB GridFS

      網友投稿 615 2025-04-02

      1、簡介


      GridFS是一種將大型文件存儲在MongoDB數據庫中的文件規范,所有官方支持的驅動均實現了GridFS規范。

      1.1、為什么要用GirdFS

      由于MongoDB中BSON對象大小是有限制的,所有GridFS規范提供了一種透明的機制,可以將一個大文件分割成為多個較小的文檔,這樣的機制允許我們有效的保存大文件對象,特別是對于那些巨大的文件,比如視頻、高清圖片等。

      1.2、如何實現海量存儲

      為實現這點,該規范制定了一個將文件分塊的標準,每個文件都將在文件集合對象中保存一個元數據對象,一個或者多個chunk塊對象可以被組合保存在一個chunk塊集合中,大多數情況下,你無需了解此規范中細節。而可將注意力放在各個語言版本的驅動中有關GridFS API的部分或是如何使用mongofiles工具上。

      1.3、語言支持

      GridFS對Java、Perl、PHP、Python、Ruby等程序語言均支持,且提供了良好的API接口。

      1.4、簡單介紹

      GridFS使用兩個表來存儲數據:

      files包含元數據對象

      chunks包含其他一些相關信息的二進制塊。

      為了使多個GridFS命名為一個單一的數據庫,文件和塊都有一個前綴,默認情況下,前綴是fs,所以任何默認的GridFS存儲將包括命名空間fs.files和fs.chunks。各種第三方語言的驅動有權限改變這個前綴,所以你可以嘗試設置另一個GridFS命名空間用于存儲照片,它的具體位置為:photos.files和photos.chunks,下面我們看一下實際例子。

      1.5、命令行工具

      mongofiles是從命令行操作GridFS的一種工具,比如我們/usr/local/xuz/test.html文件存到庫里面,具體用法如下:

      [root@localhost bin]# ./mongofiles put /usr/local/xuz/test.html

      connected to: 127.0.0.1

      added file: { _id: ObjectId('54a8d33846d47e7bbe9a847a'), filename: "/usr/local/xuz/test.html", chunkSize: 261120, uploadDate: new Date(1420350265089), md5: "aead353cb437d4d29d61f05bb548b191", length: 31 }

      done!

      下面我們查看一下庫里有哪些GridFS文件,在mongofiles后加一個參數list即可。

      [root@localhost bin]# ./mongofiles list

      connected to: 127.0.0.1

      /usr/local/xuz/test.html ? ? ? ?31

      接下來我們進庫里看一下是否有新的東西

      [root@localhost bin]# ./mongo

      MongoDB shell version: 2.6.6

      connecting to: test

      > show collections

      c1

      c2

      c3

      c4

      fs.chunks ? ----上文提到的fs.chunks

      fs.files ? ?----上文提到的fs.files

      system.indexes

      MongoDB 第6章 MongoDB GridFS

      system.js

      xuz

      我們繼續查看fs.files中的內容

      > db.fs.files.find();

      { "_id" : ObjectId("54a8d33846d47e7bbe9a847a"), "filename" : "/usr/local/xuz/test.html", "chunkSize" : 261120, "uploadDate" : ISODate("2015-01-04T05:44:25.089Z"), "md5" : "aead353cb437d4d29d61f05bb548b191", "length" : 31 }

      字段說明:

      Filename:存儲的文件名

      chunkSize:chunks分塊的大小

      uploadDate:入庫的時間

      md5:此文件的md5碼

      length:文件大小,單位字節

      看來fs.files中存儲的是一些基礎的元數據信息。

      我們繼續查看fs.chunks中的內容

      > db.fs.chunks.find();

      { "_id" : ObjectId("54a8d339deaed25af579df57"), "files_id" : ObjectId("54a8d33846d47e7bbe9a847a"), "n" : 0, "data" : BinData(0,"c2RzZHNkCnNkc2RzZApzZHNkcwpzZHNkcwpzZHNkCg==") }

      其中比較重要的字段是n,它代表的是chunks的序號,此序號從0開始,看來fs.chunks中存儲的是一些實際的內容數據信息。

      我們既然能將此文件存進去,我們就應該有辦法將其取出來,下面我們將該文件取出來。

      [root@localhost bin]# cd /usr/local/xuz

      [root@localhost xuz]# ls -l

      total 4

      -rw-r--r--. 1 root root 31 Jan ?4 13:43 test.html

      [root@localhost xuz]# rm -rf test.html --刪除文件

      [root@localhost xuz]# ll

      total 0

      [root@localhost bin]# ./mongofiles get /usr/local/xuz/test.html

      connected to: 127.0.0.1

      done write to: /usr/local/xuz/test.html

      [root@localhost bin]# md5sum /usr/local/xuz/test.html ? ?--檢驗md5,結果跟存進庫里的相同

      aead353cb437d4d29d61f05bb548b191 ?/usr/local/xuz/test.html

      最后查看是否取出該文件。

      [root@localhost bin]# cd /usr/local/xuz

      [root@localhost xuz]# ll

      total 4

      -rw-r--r--. 1 root root 31 Jan ?4 13:57 test.html ? ? --成功取出文件

      1.6、索引

      db.fs.chunks.ensureIndex({files_id:1,n:1}),{unique:true}

      這樣,一個塊就可以利用它的files_id和n的值進行檢索,注意,GridFS仍然可以用findOne得到第一個塊,如下:

      db.fs.chunks.findOne({files_id:myFileID,n:0});

      MongoDB

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何手動刷新數據透視表讓其顯示的名稱與數據源的一致(當源數據更改時數據透視表會隨之自動更新)
      下一篇:所有頁面中均顯示Word文檔中的表格標題的方法
      相關文章
      国产亚洲色婷婷久久99精品91| 亚洲国产专区一区| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 日韩精品亚洲专区在线影视| 亚洲国产欧美一区二区三区| 91丁香亚洲综合社区| 亚洲av无码片区一区二区三区| 亚洲理论片在线中文字幕| 亚洲成人黄色在线观看| 亚洲成人午夜电影| 亚洲一区二区三区免费观看| 亚洲国产美女视频| 亚洲av无码电影网| 亚洲永久网址在线观看| 亚洲精品一卡2卡3卡四卡乱码| 亚洲无码一区二区三区| 日本亚洲欧美色视频在线播放| 久久久久亚洲国产AV麻豆| 国产亚洲精品国产福利在线观看| 国产精品亚洲av色欲三区| 婷婷亚洲综合五月天小说在线| 伊在人亚洲香蕉精品区麻豆| 亚洲精品国产成人影院| 国产亚洲精品高清在线| 亚洲国产精品无码久久一区二区 | 亚洲av乱码一区二区三区| va天堂va亚洲va影视中文字幕| 久久亚洲国产最新网站| 亚洲精华液一二三产区| 亚洲AV成人精品一区二区三区| 亚洲AV无码不卡在线观看下载| 久久99亚洲综合精品首页| 亚洲春色在线视频| 亚洲毛片基地日韩毛片基地| ass亚洲**毛茸茸pics| 亚洲第一综合天堂另类专| 亚洲精品视频免费| 久久亚洲综合色一区二区三区| 亚洲人成电影在在线观看网色| 亚洲精品偷拍无码不卡av| 中文日韩亚洲欧美制服|