MongoDB GridFS 使用 存儲特點

GridFS簡介

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

  • 2,GridFS是MongoDB用來存儲大型二進制文件的一種存儲機制。

  • 3,GridFS 不是講文件存儲在單個文檔中,而是將文件分爲塊,並將每個塊作爲單獨的文檔存儲,默認情況下,GridFS使用的塊大小爲256kb,最後一個塊除外。

  • 4, GridFS 使用兩個集合存儲文件,一個集合文件的塊,另一個存儲文件的原始數據。

GridFS 優缺點

優點

  • 1:能夠簡化技術棧,如果已經使用了MongoDB,那麼使用GridFS,就不需要其它獨
    立的存儲工具了

  • 2:GridFS會自動平衡已有的複製,或者爲MongoDB設置的自動分片,所以對文件存
    儲做故障轉移或者是橫向擴展會更容易 。

  • 3:GridFS的功能不錯,能自動解決一些其他文件系統遇到的問題,如在同一個目錄
    下存儲大量的文件

缺點

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

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


mongofiles 命令使用

語法

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

常用的 options

option 描述
–host mongodb地址
–port 端口號
–username 用戶名
–password 密碼
–db mongodb 數據庫
–local 本地的文件名稱 用於 put/get

* 雙 ‘-’

commands 命令

command 描述
list 列出GridFS存儲的文件 以xxx 開頭的文件
search 搜索 包含 xxx的文件
put 將本地文件保存於 GridFS
get 下載文件
get_id “” 獲取到指定id的文件
delete 刪除指定的文件
delete_id 刪除指定id的文件


上傳一個文件到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 表示數據庫

  • –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


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 會將大文件分割爲多個塊,將每個塊作爲獨立的文檔進行存儲,
另外用一個文檔來講這些塊組織到一起,並存儲該文件的元信息。

GridFS中的塊被存儲到專用的集合中,默認是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:塊所包含的二進制數據


GridFS中每個文件的元信息被存儲到單獨的集合中,默認是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:文件包含的字節數

  • 3:chunkSize:組成文件的每個快的大小,單位是字節,這個值默認是256k

  • 4:uploadDate:文件被上傳到GridFS的日期 5:md5:文件內容的md5校驗值


參考文章

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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章