mongodb的gridfs

mongodb中是能夠保存二進制文件的,其用於存儲文件的文件系統叫作gridfs,有點相似hadoop的HDFS的感受。mongodb

gridfs的入門操做,如保存、查看、刪除,仍是比較簡單的,也不須要複雜的配置,只要mongodb安裝好就ok,個人mongodb已經安裝好,使用默認的配置。shell

XXXXX@XXXXX-asus:~$ ls -al mongodb_log_bak.log 
-rw-r--r-- 1 XXXXX XXXXX 122106  3月 21 14:18 mongodb_log_bak.log
XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 list
connected to: localhost:27017
XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 put mongodb_log_bak.log 
connected to: localhost:27017
added file: { _id: ObjectId('532bde4f11647a7d20f88825'), filename: "mongodb_log_bak.log", chunkSize: 262144, uploadDate: new Date(1395383887367), md5: "37563b840ee4b7fe92d3a6051aac4665", length: 122106 }
done!
XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 list
connected to: localhost:27017
mongodb_log_bak.log    122106
XXXXX@XXXXX-asus:~$ rm mongodb_log_bak.log
XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 get mongodb_log_bak.log
connected to: localhost:27017
done write to: mongodb_log_bak.log
XXXXX@XXXXX-asus:~$ ls -al mongodb_log_bak.log 
-rw-rw-r-- 1 XXXXX XXXXX 122106  3月 21 14:42 mongodb_log_bak.log
XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 delete mongodb_log_bak.log
connected to: localhost:27017
done!
XXXXX@XXXXX-asus:~$ 

在這個例子中,我將以前的mongodb的log備份出來,mongodb_log_bak.log,用於測試。保存、查詢、獲取、刪除分別是put、list、get、delete,更多的選項也能夠用mongofiles --help來看。gridfs也有一些不足的地方,好比,保存文件的時候沒有保存時間戳,只保存了文件內容。oop

也能夠登錄mongodb的client看fs.chunks和fs.files。測試

XXXXX@XXXXX-asus:~$ mongo
MongoDB shell version: 2.2.4
connecting to: test
> show collections
emp_dept
fs.chunks
fs.files
master_slave
result
system.indexes
testrep
> db.fs.chunks.find({},{"_id":1,"n":1,"files_id":1})
{ "_id" : ObjectId("532bde4fb65a5f88fa9c1649"), "files_id" : ObjectId("532bde4f11647a7d20f88825"), "n" : 0 }
> db.fs.files.find()
{ "_id" : ObjectId("532bde4f11647a7d20f88825"), "filename" : "mongodb_log_bak.log", "chunkSize" : 262144, "uploadDate" : ISODate("2014-03-21T06:38:07.367Z"), "md5" : "37563b840ee4b7fe92d3a6051aac4665", "length" : 122106 }
> 

fs.chunks實際上還有一個元素「data」,看名字就知道這個是保存文件的具體內容,因爲文件比較大,我就沒有列出來,文件的大部分信息在fs.files中有列出,與以前使用mongofiles時候的提示信息一致。其實,把文件存入到GridFS過程當中,若是文件大於chunksize,gridfs會把文件分割成多個chunk,再把這些chunk保存到fs.chunks中,最後再把文件信息存入到fs.files中。個人這個實驗中,數據文件彷佛仍是小了一點,只有1個chunk。spa

因而加大文件,使用cat mongodb_log_bak.log >> 1.txt,執行3次,獲得一個源文件3倍大小的文件,此次應該會出現2個chunk,重複上述步驟,發現的確如此code

XXXXX@XXXXX-asus:~$ mongo
MongoDB shell version: 2.2.4
connecting to: test
> db.fs.chunks.find({},{"_id":1,"n":1,"files_id":1})
{ "_id" : ObjectId("532be575b65a5f88fa9c164b"), "files_id" : ObjectId("532be575c305f3ace8c29bc1"), "n" : 0 }
{ "_id" : ObjectId("532be576b65a5f88fa9c164c"), "files_id" : ObjectId("532be575c305f3ace8c29bc1"), "n" : 1 }
> db.fs.files.find()
{ "_id" : ObjectId("532be575c305f3ace8c29bc1"), "filename" : "1.txt", "chunkSize" : 262144, "uploadDate" : ISODate("2014-03-21T07:08:38.016Z"), "md5" : "518bd138bd4fd009b96181b207217d04", "length" : 366318 }
> 
相關文章
相關標籤/搜索