最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 10:45:40
文檔

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ)

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ):GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因:利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用了MongoDB GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因: 利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用
推薦度:
導(dǎo)讀MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ):GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因:利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用了MongoDB GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因: 利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用

GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因:利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用了MongoDB

GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因:

利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用了MongoDB,GridFS就可以不需要使用獨(dú)立文件存儲(chǔ)架構(gòu)。

GridFS會(huì)直接利用業(yè)已建立的復(fù)制或分片機(jī)制,所以對(duì)于文件存儲(chǔ)來(lái)說(shuō)故障恢復(fù)和擴(kuò)展都很容易。

GridFS可以避免用于存儲(chǔ)用戶上傳內(nèi)容的文件系統(tǒng)出現(xiàn)的某些問(wèn)題。例如,GridFS在同一個(gè)目錄下放置大量的文件是沒(méi)有任何問(wèn)題的。

GridFS不產(chǎn)生磁盤(pán)碎片,因?yàn)镸ongoDB分配數(shù)據(jù)文件空間時(shí)以2GB為一塊。

使用場(chǎng)景:如果你的系統(tǒng)有如下情景:

1) 有大量的上傳圖片(用戶上傳或者系統(tǒng)本身的文件發(fā)布等)

2) 文件的量級(jí)處于飛速增長(zhǎng),有可能打到單機(jī)操作系統(tǒng)自己的文件系統(tǒng)的查詢性能瓶頸,甚至超過(guò)單機(jī)硬盤(pán)的擴(kuò)容范圍.

3) 文件的備份(不適用gridfs這種三方也可以做,但是不盡方便),文件系統(tǒng)訪問(wèn)的故障轉(zhuǎn)移和修復(fù)..

4) 文件的索引,存儲(chǔ)除文件本身以外還需要關(guān)聯(lián)更多的元數(shù)據(jù)信息(比如,不僅僅存儲(chǔ)文件,還要保存一些文件的發(fā)布式作者/發(fā)布時(shí)間/文件tag屬性等等自定義信息)并且需要索引的...

5) 基于4),對(duì)文件的分類(lèi)模糊,如果采用操作系統(tǒng)的文件系統(tǒng),文件夾分類(lèi)關(guān)系混亂或者無(wú)法分類(lèi)時(shí)..

6) 當(dāng)前系統(tǒng)是基于web的,對(duì)圖片的訪問(wèn)根據(jù)url了規(guī)則路由的..(普通文件系統(tǒng)也可以)

7) 文件尺寸較小,而且眾多,且文件有可能被遷移/刪除等..

在Mongodb中以GridFSB方式存放文件有兩種方式:

1、命令行方式mongofiles 2、客戶端驅(qū)動(dòng)編程

1、命令行方式mongofiles

mongofiles命令行下向Mongodb數(shù)據(jù)庫(kù)中插入文件數(shù)據(jù)。

mongofiles -host 127.0.0.1:27017 -d mydb put 文件名

向數(shù)據(jù)庫(kù)mydb中插入一個(gè)文件,其中put為命令,,表示向Mongodb中上傳文件,get、delete分別表示取得文件和刪除文件。

執(zhí)行 db.fs.files.find()即可看到GridFS中的文件列表.

mongo自帶有一個(gè)實(shí)現(xiàn)mongofliles,基本操作如下:
列出所有文件:
mongofiles list
上傳一個(gè)文件:
mongofiles put xxx.txt
下載一個(gè)文件:
mongofiles get xxx.txt
查找文件:
mongofiles search xxx //會(huì)查找所有文件名中包含“xxx”的文件
mongofiles list xxx //會(huì)查找所有文件名以“xxx”為前綴的文件
參數(shù)說(shuō)明:
–d 指定數(shù)據(jù)庫(kù) ,默認(rèn)是fs,Mongofiles list –d testGridfs
-u –p 指定用戶名,密碼
-h 指定主機(jī)
-port 指定主機(jī)端口
-c 指定集合名,默認(rèn)是fs
-t 指定文件的MIME類(lèi)型,默認(rèn)會(huì)忽略

2、使用API來(lái)存取文件

我一般用python調(diào)用pymongo管理mongodb的聚集

很多時(shí)候我們可以搭配nginx用,讓nginx直接讀取gridfs的文件。

安裝nginx-gridfs
wget https://download.github.com/mdirolf-nginx-gridfs-v0.8-0-gb5f8113.tar.gz
tar –zxvf mdirolf-nginx-gridfs-v0.8-0-gb5f8113.tar.gz
mv mdirolf-nginx-gridfs-v0.8-0-gb5f8113 mdirolf-nginx-gridfs-v0.8
wget https://download.github.com/mongodb-mongo-c-driver-v0.3-0-g74cc0b8.tar.gz
tar –zxvf mongodb-mongo-c-driver-v0.3-0-g74cc0b8.tar.gz
mv mongodb-mongo-c-driver-v0.3-0-g74cc0b8/* mdirolf-nginx-gridfs-v0.8/mongo-c-driver
rm –rf mongodb-mongo-c-driver-v0.3-0-g74cc0b8
安裝nginx,指定nginx-gridfs目錄與nginx聯(lián)合編譯
wget
tar –zxvf nginx-1.0.1.tar.gz
cd nginx-1.0.1
./configure --prefix=/usr/local/nginx --with-openssl=/usr/include/openssl --with-http_stub_status_module --add-module=/home/cdh/Downloads/mdirolf-nginx-gridfs
make –j8
sudo make install –j8
配置nginx-gridfs
location /pics/ {
gridfs pics
field=filename
type=string;
mongo 127.0.0.1:27017;
}
gridfs:nginx識(shí)別插件的關(guān)鍵字
pics:db名
[root_collection]: 選擇collection,如root_collection=blog, mongod就會(huì)去找blog.files與blog.chunks兩個(gè)塊,默認(rèn)是fs
[field]:查詢字段,保證mongdb里有這個(gè)字段名,支持_id, filename, 可省略, 默認(rèn)是_id
[type]:解釋field的數(shù)據(jù)類(lèi)型,支持objectid, int, string, 可省略, 默認(rèn)是int
[user]:用戶名, 可省略
[pass]:密碼, 可省略
mongo:mongodb url
能下載圖片就說(shuō)明成功了

gridfs 都是應(yīng)用到偏海量,又不到海量的文件需求場(chǎng)景下的,不然咱們也不會(huì)花這么多功夫來(lái)搞這個(gè)了。

在這種需求下,可以用分片和主從把壓力分切開(kāi)。

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ)

mkdir -p /data/shard/s0
mkdir -p /data/shard/s1
mkdir -p /data/shard/log
mkdir -p /data/shard/config
#啟動(dòng)shard server
./mongod --shardsvr --port 20000 --dbpath /data/shard/s0 --fork --logpath /data/shard/log/s0.log --directoryperdb
./mongod --shardsvr --port 20001 --dbpath /data/shard/s1 --fork --logpath /data/shard/log/s1.log --directoryperdb
#啟動(dòng)配置服務(wù)器config server
./mongod --configsvr --port 30000 --dbpath /data/shard/config --fork --logpath /data/shard/log/config.log --directoryperdb
#啟動(dòng)route server mongos
mongos --port 40000 --configdb localhost:30000 --fork --logpath /data/shard/log/route.log --chunkSize 1
#添加分片
./mongo admin --port 40000 #鏈接mongos
db.runCommand({addshard:"localhost:20000"}) #添加分片1
db.runCommand({addshard:"localhost:20001"}) #添加分片2
db.runCommand({enablesharding:"test"}) #設(shè)置test庫(kù)開(kāi)啟分片
db.runCommand({shardcollection:"test.users",key:{_id:1}}) #設(shè)置test.users集合分片和分片的主鍵
#驗(yàn)證sharding
use test
#插入50萬(wàn)數(shù)據(jù)
for(var i=1;i<=500000;i++) db.users.insert({age:i,name:"zx",addr:"beijing",country:"china"})
db.users.stats() #查看users的分片情況

linux

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ)

MongoDB基于GridFS實(shí)現(xiàn)文件的分布式存儲(chǔ):GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因:利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用了MongoDB GridFS是一種在MongoDB中存儲(chǔ)大二進(jìn)制文件的機(jī)制。使用GridFS存文件有如下幾個(gè)原因: 利用Grid可以簡(jiǎn)化需求。要是已經(jīng)用
推薦度:
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top