GridFS大文件的添加、獲取、查看、刪除


GridFS是一種在MongoDB中存儲大二進制文件的機制,使用GridFS的原因有以下幾種:

存儲巨大的文件,比如視頻、高清圖片等。

利用GridFS可以簡化需求。

GridFS會直接利用已經建立的復制或分片機制,故障恢復和擴展都很容易

GridFS可以避免用戶上傳內容的文件系統出現問題。

GridFS不產生磁盤碎片。

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

fiiles包含元數據對象(如文件的名稱、上傳的時間)

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

為了使度個GridF命名為一個單一的數據庫,文件和塊都有一個前綴,默認情況下,前綴是fs。

所以任何默認的GridFS存儲將包括命名空間fs.files和fs.chunks。(圖片可以命名為ps.files和ps.chunks,視頻可以命名為vs.files和vs.chunks)。

各種第三方語言可以更改其前綴。

本文是oschina的happyBKs的文章,請自己標明出處:http://my.oschina.net/u/1156339/blog/388156

使用GridFS mongofiles

mingofiles是從命令行操作GridFS的一種工具

三個命令:put(存儲) get(取得) list(列表)

例如:我們將“testfile”這個文件存儲到庫中,具體做法是 ./mongofiles put testfile

首先,我們嘗試壓縮歸檔一個文件。

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  2.  
    [sudo] password  for neil: 
  3.  
     
  4.  
    connected  to: 127.0.0.1
  5.  
    [neil@neilhost ~]$ tar zcf mongodbBook.tar.gz Downloads/MongoDB權威指南.pdf 
  6.  
    [neil@neilhost ~]$ ll mongodbBook.tar.gz 
  7.  
    -rw-rw-r--.  1 neil neil 203 3月  16 19:10 mongodbBook.tar.gz

下面我們將這個歸檔文件存儲到mongoDB中。默認存放到test數據庫中。

  1.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles put ./mongodbBook.tar.gz 
  2.  
    connected to:  127.0.0.1
  3.  
    added file: { _id: ObjectId( '5506bc01581b37b38b49fecd'), filename: "./mongodbBook.tar.gz", chunkSize: 261120, uploadDate: new Date(1426504705885), md5: "85c0c93f51ebe9c609ffe4f9da71c63e", length: 203 }
  4.  
    done!
  5.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles list
  6.  
    connected to:  127.0.0.1
  7.  
    ./mongodbBook.tar.gz 203
  8.  
    [neil@neilhost ~]$

之后,我們進入mongodb客戶端查看test數據庫,發現里面多了兩個集合,一個是fs.files,查看之后發現里面記錄着上傳文件的以下像信息:文件名稱、上傳時間、md5碼、文件長度、大小等。

fs.chunks查看顯示二進制信息。

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo
  2.  
    [sudo] password  for neil: 
  3.  
    MongoDB shell version: 2.6.8
  4.  
    connecting to: test
  5.  
    > show tables
  6.  
    fs.chunks
  7.  
    fs.files
  8.  
    system.indexes
  9.  
  10.  
  11.  
    > db.fs.files. find()
  12.  
    "_id" : ObjectId("5506bc01581b37b38b49fecd"), "filename" : "./mongodbBook.tar.gz", "chunkSize" : 261120, "uploadDate" : ISODate("2015-03-16T11:18:25.885Z"), "md5" : "85c0c93f51ebe9c609ffe4f9da71c63e", "length" : 203 }
  13.  
    > db.fs.chunks. find()
  14.  
    "_id" : ObjectId("5506bc011b359e376ad0011e"), "files_id" : ObjectId("5506bc01581b37b38b49fecd"), "n" : 0, "data" : BinData(0,"H4sIADm6BlUAA+3OvwsBcRjH8a+uZOE/kNuYuOO+btetMvkD1CHFnfzISgYDZqWU0d9g4w+x3W1mq7uUkmKgpN6v4Xnq+Tz1PJY7ctpuze7nyq7TdK2Sv5l6u4m/mHnLVbZrN8TntEDR0MKum/Kh30gp9LzUdFkIiwhSwzCFqn3h9lvD/qDWU1Xh1FvtV3vv8j+VmsdEfB+tCuV8iMSDwXF7qXQS5va+MTaV9SmZFpmf/QgAAAAAAAAAAAAAAAAAeHYFpzavuwAoAAA=") }
  15.  
    >

這個文件不大,所以二進制信息很短。

  1.  
    [neil@neilhost ~]$ du mongodbBook.tar.gz 
  2.  
    4 mongodbBook.tar.gz

接下來,我嘗試將mongodbBook.tar.gz的原文件刪除,然后從mongodb中獲取恢復。

這里用到的是mongofiles get命令。這里注意的是

  1.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles list
  2.  
    connected  to: 127.0.0.1
  3.  
    ./mongodbBook.tar.gz 203
  4.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles get mongodbBook.tar.gz
  5.  
    connected  to: 127.0.0.1
  6.  
    ERROR:  file not found
  7.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles get ./mongodbBook.tar.gz
  8.  
    connected  to: 127.0.0.1
  9.  
    done  write to: ./mongodbBook.tar.gz
  10.  
    [neil@neilhost ~]$ ll
  11.  
    總用量  44
  12.  
    drwxr-xr-x.  2 neil neil 4096 2月  13 18:36 Desktop
  13.  
    drwxr-xr-x.  3 neil neil 4096 2月  13 21:35 Documents
  14.  
    drwxr-xr-x.  5 neil neil 4096 3月  15 21:56 Downloads
  15.  
    -rw-r--r--.  1 root root  203 3月  17 18:27 mongodbBook.tar.gz
  16.  
    drwxr-xr-x.  2 neil neil 4096 2月  13 18:36 Music
  17.  
    drwxr-xr-x.  3 neil neil 4096 3月  15 22:50 Pictures

這里需要注意的是,后面get的文件名稱需要指定路徑,這里要加上./,否則會顯示文件不存在。

注意,這個./指的不是linux當前的路徑,而是在Mongodb的文件存儲中的路徑。

之后,有put有get必有delete。

接下來看看如何刪除MongoDB中的大文件.

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  2.  
    [sudo] password for neil: 
  3.  
    connected to: 127.0.0.1
  4.  
    ./mongodbBook.tar.gz 203
  5.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles  delete ./mongodbBook.tar.gz 
  6.  
    connected  to: 127.0.0.1
  7.  
    done!
  8.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongofiles list
  9.  
    connected  to: 127.0.0.1
  10.  
    [neil@neilhost ~]$ sudo /usr/ local/mongodb/bin/mongo
  11.  
    MongoDB shell  version: 2.6.8
  12.  
    connecting  to: test
  13.  
    > db
  14.  
    test
  15.  
    show collections
  16.  
    fs.chunks
  17.  
    fs.files
  18.  
    system.indexes
  19.  
    > db.fs.files.find()
  20.  
  21.  
    > db.fs.chunks.find()
  22.  
    >

刪除之后可以看到fs.files中的元數據和fs.chunk中的二進制數據都沒有了。

--------------------- 本文來自 Ghost丶 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/linux_hacher/article/details/79663911?utm_source=copy 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM