MongoDB GridFS 使用 存儲特點(diǎn)

GridFS簡介

  • 1,GridFS是用于存儲和檢索超過16MB的BSON文檔大小限制的文件的解決方案。

  • 2,GridFS是MongoDB用來存儲大型二進(jìn)制文件的一種存儲機(jī)制。

  • 3,GridFS 不是講文件存儲在單個(gè)文檔中,而是將文件分為塊,并將每個(gè)塊作為單獨(dú)的文檔存儲,默認(rèn)情況下,GridFS使用的塊大小為256kb,最后一個(gè)塊除外。

  • 4, GridFS 使用兩個(gè)集合存儲文件,一個(gè)集合文件的塊,另一個(gè)存儲文件的原始數(shù)據(jù)。

GridFS 優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 1:能夠簡化技術(shù)棧,如果已經(jīng)使用了MongoDB,那么使用GridFS,就不需要其它獨(dú)
    立的存儲工具了

  • 2:GridFS會(huì)自動(dòng)平衡已有的復(fù)制,或者為MongoDB設(shè)置的自動(dòng)分片,所以對文件存
    儲做故障轉(zhuǎn)移或者是橫向擴(kuò)展會(huì)更容易 。

  • 3:GridFS的功能不錯(cuò),能自動(dòng)解決一些其他文件系統(tǒng)遇到的問題,如在同一個(gè)目錄
    下存儲大量的文件

缺點(diǎn)

  • 1: 性能較低,不如直接訪問文件系統(tǒng)快。

  • 2:無法修改文檔。如果要修改GridFS里面的文檔,只能是先刪除再添加

mongofiles 命令使用

語法

mongofiles <options> <commands> <filename>
  • mongofiles 的命令 和mongo mongod 在同一級目錄中。

常用的 options

option 描述
--host mongodb地址
--port 端口號
--username 用戶名
--password 密碼
--db mongodb 數(shù)據(jù)庫
--local 本地的文件名稱 用于 put/get
  • 雙 '-'

commands 命令

command 描述
list <prefix> 列出GridFS存儲的文件 以xxx 開頭的文件
search <string> 搜索 包含 xxx的文件
put <filename> 將本地文件保存于 GridFS
get <filename> 下載文件
get_id "<ObjectId>" 獲取到指定id的文件
delete <filename> 刪除指定的文件
delete_id 刪除指定id的文件
  • 雙 '-'

上傳一個(gè)文件到mongodb put

bin/mongofiles --port 20001 --host 127.0.0.1 -d dbs\db1 --local /Users/lihao/Downloads/cart2.jpg put cart.jpg

2017-08-13T20:22:21.586+0800    connected to: 127.0.0.1:20001
added file: cart.jpg

  • -d 表示數(shù)據(jù)庫

  • --local 要上傳的本地文件

  • put 存儲在mongodb 中的文件名

查看存儲的所有的文件 list

bin/mongofiles --port 20001 --host 127.0.0.1 -d dbs\db1 list

2017-08-13T20:26:45.426+0800    connected to: 127.0.0.1:20001
/Users/lihao/Downloads/rsa.txt  2777
rsa3.txt    2777
cart.jpg    21421

搜索文件 search

bin/mongofiles --port 20001 --host 127.0.0.1 -d dbs\db1  search cart
2017-08-13T20:28:44.750+0800    connected to: 127.0.0.1:20001
cart.jpg    21421

下載文件 get

bin/mongofiles --port 20001 --host 127.0.0.1 -d dbs\db1  --local  /Users/lihao/Desktop/rsa/cart.jpg get cart.jpg
2017-08-13T20:39:22.282+0800    connected to: 127.0.0.1:20001
finished writing to /Users/lihao/Desktop/rsa/cart.jpg

---local 下載到本地文件名全路徑

刪除mongodb 存儲文件

bin/mongofiles --port 20001 --host 127.0.0.1 -d dbs\db1  delete cart.jpg
2017-08-13T20:45:35.762+0800    connected to: 127.0.0.1:20001
successfully deleted all instances of 'cart.jpg' from GridFS

GridFS 基本原理

GridFS 會(huì)將大文件分割為多個(gè)塊,將每個(gè)塊作為獨(dú)立的文檔進(jìn)行存儲,
另外用一個(gè)文檔來講這些塊組織到一起,并存儲該文件的元信息。

GridFS中的塊被存儲到專用的集合中,默認(rèn)是fs.chunks

    bin/mongo 127.0.0.1:20001
    use dbsdb1
    db.fs.chunks.find();
    { 
    "_id" : ObjectId("598fc1c11194fce1dbcd57a5"), 
    "files_id" : ObjectId("598fc1c11194fce1dbcd57a4"), 
    "n" : 0.0, 
    "data" : BinData(0, "xxxx")
    }

  • 1:files_id:塊所屬文件的元信息

  • 2:n:塊在文件中的相對位置

  • 3:data:塊所包含的二進(jìn)制數(shù)據(jù)

GridFS中每個(gè)文件的元信息被存儲到單獨(dú)的集合中,默認(rèn)是fs.files

    db.fs.files.find()
    { 
    "_id" : ObjectId("598fc1c11194fce1dbcd57a4"), 
    "chunkSize" : 261120.0, 
    "uploadDate" : ISODate("2017-08-13T03:04:33.114+0000"), 
    "length" : 2777.0, 
    "md5" : "fd12ab0bd883a9530331f35c9e04006c", 
    "filename" : "rsa3.txt"
}

  • 1:_id:文件唯一的id,就是前面的files_id

  • 2:length:文件包含的字節(jié)數(shù)

  • 3:chunkSize:組成文件的每個(gè)快的大小,單位是字節(jié),這個(gè)值默認(rèn)是256k

  • 4:uploadDate:文件被上傳到GridFS的日期 5:md5:文件內(nèi)容的md5校驗(yàn)值

參考文章

https://docs.mongodb.com/manual/reference/program/mongofiles/

https://docs.mongodb.com/manual/core/gridfs/#gridfs-collections

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容