多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術(shù) > MongoDB: 10. Grid FS

MongoDB: 10. Grid FS

來源:程序員人生   發(fā)布時間:2013-11-12 07:11:56 閱讀次數(shù):3129次
GridFS 的文件同樣是保存在 db.collection 中,通常使用 fs.files 存儲文件元數(shù)據(jù)信息,fs.chunks 存儲文件內(nèi)容。

存儲海量文件,得啟用 Auto-Sharding。

> admin.runCommand({ enablesharding: test })
> admin.runCommand({ shardcollection: test.fs.chunks, key:{files_id:1} })
PyMongo API 中有個 GridFS 對象,使用方法很簡單。

>>> from pymongo import *
>>> from pymongo.objectid import ObjectId
>>> from gridfs import *
>>> from pprint import pprint

>>> conn = Connection()
>>> db = conn.test
>>> gfs = GridFS(db)
隨便找個文件存到 GridFS 中,除了必須的 filename 外,還可以附加任意屬性。

>>> with open("/home/yuhen/a.txt", "r") as file:
... id = gfs.put(file.read(), filename = "/xxx/xxx/a.txt", upload = "q.yuhen", abc = 123)
... print id
...
4c85e1f8499b144773000000

>>> gfs.list()
[u'/xxx/xxx/a.txt']
用 mongo 看看數(shù)據(jù)庫中存儲的具體信息。

$ ./mongo

MongoDB shell version: 1.6.2
connecting to: test

> show collections
fs.chunks
fs.files
system.indexes

> db.fs.files.find()
{
"_id" : ObjectId("4c85e1f8499b144773000000"),
"abc" : 123,
"chunkSize" : 262144,
"upload" : "q.yuhen",
"filename" : "/xxx/xxx/a.txt",
"length" : 14,
"uploadDate" : "Tue Sep 07 2010 14:55:52 GMT+0800 (CST)",
"md5" : "284d1d15a9d681b288cb5915ada39f53"
}

> db.fs.chunks.find()
{
"_id" : ObjectId("4c85e1f8499b144773000001"),
"n" : 0,
"data" : BinData(2,"DgAAAGFiY2VmZywgaGVsbG8K"),
"files_id" : ObjectId("4c85e1f8499b144773000000")
}
我們可以用 file_id 讀取文件數(shù)據(jù)(包括文件內(nèi)容和附加屬性)。

>>> with open("/home/yuhen/a2.txt", "w") as file:
... out = gfs.get(ObjectId("4c85e1f8499b144773000000"))
... file.write(out.read())
... pprint(dir(out))
... pprint(out._file.items())
... print out.name
... print out.upload
... print out.abc
...

[
...,
'_file',
'_id',
'aliases',
'chunk_size',
'content_type',
'length',
'md5',
'metadata',
'name',
'read',
'seek',
'tell',
'upload_date'
]

[
(u'abc', 123),
(u'chunkSize', 262144),
(u'upload', u'q.yuhen'),
(u'filename', u'/xxx/xxx/a.txt'),
(u'length', 14),
(u'uploadDate', datetime.datetime(2010, 9, 7, 6, 55, 52, 611000)),
(u'_id', ObjectId('4c85e1f8499b144773000000')),
(u'md5', u'284d1d15a9d681b288cb5915ada39f53')
]

/xxx/xxx/a.txt
q.yuhen
123
還可以用 filename 讀取文件。在應(yīng)用中我們通常要確保 filename 唯一性。

>>> with open("/home/yuhen/a3.txt", "w") as file:
... out = gfs.get_last_version("/xxx/xxx/a.txt")
... file.write(out.read())
... print out.name, out.length
...

/xxx/xxx/a.txt 14
用相同的 filename 存儲同一文件的不同版本是允許的,數(shù)據(jù)庫中會保留所有歷史數(shù)據(jù)。但用 get_last_version(filename) 只能取回最后一次的更新數(shù)據(jù),可以直接從 db.fs.files 中查詢 file_id 來獲取不同版本內(nèi)容。

>>> with open("/home/yuhen/a.txt", "r") as file:
... id = gfs.put(file.read(), filename = "/xxx/xxx/a.txt", upload = "q.yuhen", abc = 456)
... print id
...
4c85e70a499b144773000004

>>> gfs.list()
[u'/xxx/xxx/a.txt']

>>> with open("/home/yuhen/a3.txt", "w") as file:
... out = gfs.get_last_version("/xxx/xxx/a.txt")
... file.write(out.read())
... print out.name, out.length, out.abc
...
/xxx/xxx/a.txt 22 456

>>> for f in db.fs.files.find({ "filename":"/xxx/xxx/a.txt" }):
... print f["_id"], f["length"], f["abc"]
...
4c85e70a499b144773000004 22 456
4c85e1f8499b144773000000 14 123
GridFS 還提供了 exists、delete 等方法。delete 按 file_id 刪除,也就是說是文件的最后一個版本。

>>> def clear():
... for f in gfs.list():
... id = gfs.get_last_version(f)._id
... print id
... if gfs.exists(id): gfs.delete(id)
...

>>> clear()
4c85e70a499b144773000004

>>> gfs.list()
[u'/xxx/xxx/a.txt']

>>> clear()
4c85e1f8499b144773000000

>>> gfs.list()
[]
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 一区二区在线精品免费视频 | 国产精品久久一区一区 | 欧美白人和黑人xxxx猛交视频 | 亚洲精品自拍区在线观看 | 噜噜噜噜私人影院av线观看 | 日韩在线a视频免费播放 | 中文字幕第二区 | 456亚洲人成影视在线观看 | 毛片在线网址 | 国产高清在线精品二区一 | 国产精品久久久久久久午夜片 | 国产嫩草影院精品免费网址 | 国产精品福利视频一区二区三区 | 最近的最新的中文字幕在线 | 日韩精品一 | 高清一级毛片免免费看 | 亚洲黄视频在线观看 | 免费自拍偷拍视频 | 欧美性在线播放 | 亚洲视频你懂的 | 国产亚洲综合一区二区在线 | 国产精品视_精品国产免费 国产精品视频1区 | 亚洲成a人一区二区三区 | 亚洲码在线观看 | 成人免费久久精品国产片久久影院 | 国内精神品一区区 | 欧美黄色a级 | 国产一区二区精品久久 | 黑人和黑人激情一级毛片 | 国产精品综合一区二区 | 亚洲欧洲一区二区三区在线 | 欧美一级影院 | 韩日一区二区三区 | 99久久综合狠狠综合久久aⅴ | 亚洲综合日韩欧美一区二区三 | 日韩精品区 | 亚州天堂网 | 国产欧美日韩综合在线一 | 校园春色在线视频 | 成人中文字幕在线 | 精品亚洲在线 |