溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MONGODB GridFS存儲(chǔ)文件與文件系統(tǒng)存儲(chǔ)的區(qū)別是怎樣的

發(fā)布時(shí)間:2021-09-29 11:06:17 來(lái)源:億速云 閱讀:158 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)MONGODB  GridFS存儲(chǔ)文件與文件系統(tǒng)存儲(chǔ)的區(qū)別是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

數(shù)據(jù)庫(kù)中大部分都不建議存儲(chǔ)較大的文件到數(shù)據(jù)庫(kù)中,而在MONGODB 數(shù)據(jù)庫(kù)中有一種方式可以存儲(chǔ)較大的文件,這種文件的格式叫做GridFS.

這里就產(chǎn)生一個(gè)問(wèn)題,這個(gè)GRIDFS 功能到底什么時(shí)候才有用

首先Gridfs的文件存儲(chǔ)方式和數(shù)據(jù)提取方式都與普通的MONGO的信息存儲(chǔ)的方式不同,根據(jù)文檔的提示 gridfs 存儲(chǔ)的數(shù)據(jù)應(yīng)該是超過(guò)16MB的BSON文件。

GridFS并沒(méi)有將文件存儲(chǔ)在單個(gè)文檔中,而是將文件分成多個(gè)部分(即塊[1]),并將每個(gè)塊存儲(chǔ)為單獨(dú)的文檔。默認(rèn)情況下,GridFS使用255 kB的默認(rèn)塊大小;也就是說(shuō),GridFS將文件分成255 kB的塊(最后一塊除外)。最后一塊的大小取決于需要。類似地,不大于塊大小的文件只有最后一個(gè)塊,只使用所需的空間和一些額外的元數(shù)據(jù)。

本身MONGODB 的Gridfs是通過(guò)兩個(gè)文件來(lái)進(jìn)行存儲(chǔ)數(shù)據(jù)的, 而Gridfs 和文檔存儲(chǔ)最大的區(qū)別在于,對(duì)于內(nèi)存的消耗,如果是文檔方式存儲(chǔ),則數(shù)據(jù)需要他通過(guò)內(nèi)存來(lái)進(jìn)行輸出,而如果采用gridfs的方式來(lái)存儲(chǔ)數(shù)據(jù),則文件是通過(guò)驅(qū)動(dòng)程序來(lái)進(jìn)行文件的組裝,而不再通過(guò)內(nèi)存的方式來(lái)進(jìn)行數(shù)據(jù)的提取。

說(shuō)到這里可能已經(jīng)有聲音提出異議, 我存儲(chǔ)文件使用文件系統(tǒng)好不好,為什么要用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ),性能怎么樣,你的優(yōu)勢(shì)優(yōu)勢(shì)又在哪里,這估計(jì)是比較難于回答的問(wèn)題之一。

在文件系統(tǒng)中,存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)是有限制的,這和文件的系統(tǒng)的設(shè)計(jì)是有關(guān)的,(Windows linux )都有類似的問(wèn)題,而MONGODB 的方式來(lái)存儲(chǔ)文件,這樣的情況就不是一個(gè)需要特別考慮的問(wèn)題。 

這是其一, 而后面的問(wèn)題是,如果我希望我的文件是同步傳輸?shù)?,這樣的問(wèn)題,估計(jì)要操作系統(tǒng)的文件系統(tǒng)來(lái)進(jìn)行處理,就會(huì)出現(xiàn)問(wèn)題。例如我在A 地點(diǎn)寫了一個(gè)文件,我希望我能在B 地點(diǎn)來(lái)讀取這個(gè)文件,或者我希望我的文件有備份,有COPY 有保護(hù)。

說(shuō)到這里,估計(jì)提出異議的同學(xué)的聲音慢慢會(huì)變得安靜下來(lái), 的確上面的問(wèn)題讓文件系統(tǒng)來(lái)做,方案,消耗對(duì)比,都不那么容易。

而交給MONGODB 則會(huì)變得容易了許多,如果你能保證網(wǎng)絡(luò)的穩(wěn)定性,的確可以進(jìn)行在北京寫入的文件,在上海同步提取,并且可能廣州想同時(shí)獲取也不是問(wèn)題。這不就是一個(gè)異地的文件分發(fā)系統(tǒng),如果能二次開發(fā)一下,我想這樣的產(chǎn)品也會(huì)有相關(guān)的需求。

而另外祭出的一個(gè)點(diǎn)就是,數(shù)據(jù)安全方面的需求,對(duì)于文件系統(tǒng)如果對(duì)文件進(jìn)行細(xì)致的權(quán)限劃分將是很難的一件事情,而對(duì)于數(shù)據(jù)庫(kù)則是本身具有的功能,從數(shù)據(jù)的安全性來(lái)看,如果多數(shù)據(jù)的安全性有較高的要求,完全可以通過(guò)MONGODB 的方式來(lái)更換傳統(tǒng)的文件存儲(chǔ)的模式。

廢話這么多,可以看看到底怎么操作gridfs ,下面是將一個(gè)目錄的文件,塞進(jìn)mongodb中

MONGODB  GridFS存儲(chǔ)文件與文件系統(tǒng)存儲(chǔ)的區(qū)別是怎樣的

文檔中提出,如果需要自動(dòng)更新整個(gè)文件的內(nèi)容,請(qǐng)不要使用GridFS。作為替代方法,您可以存儲(chǔ)每個(gè)文件的多個(gè)版本,并在元數(shù)據(jù)中指定文件的當(dāng)前版本。您可以在上傳文件的新版本后,在原子更新中更新指示“最新”狀態(tài)的元數(shù)據(jù)字段,然后根據(jù)需要?jiǎng)h除以前的版本。

在操作完上面的PYTHON 腳本后,查看下面的image database ,collection 會(huì)有兩個(gè)

fs.chunks

fs.files

fs.files 是負(fù)責(zé)存儲(chǔ)文件的非實(shí)體信息,可以認(rèn)為他是一個(gè)目錄, 而fs.chunks 則是存儲(chǔ)實(shí)體的file的chunks 信息。

所以兩個(gè)collection 任何一個(gè)受損都不是一件好事情。

為了提高效率,GridFS在每個(gè)塊和文件集合上使用索引。為了方便,符合GridFS規(guī)范的驅(qū)動(dòng)程序會(huì)自動(dòng)創(chuàng)建這些索引。您還可以根據(jù)需要?jiǎng)?chuàng)建任何附加索引,以滿足應(yīng)用程序的需要。

GridFS使用filename和uploadDate字段對(duì)文件集合使用索引

現(xiàn)實(shí)中如果不使用python,在外部進(jìn)行mongodb 的文件操作則可以使用 mongofiles 對(duì)MONGNODB 的存儲(chǔ)文件進(jìn)行簡(jiǎn)單的查詢和數(shù)據(jù)的處理

對(duì)于小型的文件,并且有上面提到的需求的情況下,使用MONGODB 是可以來(lái)完滿的達(dá)到相關(guān)的需求的,所以數(shù)據(jù)庫(kù)可以替代存儲(chǔ),在某些場(chǎng)合是有優(yōu)勢(shì)的。

當(dāng)然可能還有些同學(xué)提出,如果文件是在文件系統(tǒng)中可以打開后直接修改,而使用了gridfs 系統(tǒng)則不可以,而必須下載文件,然后在將修改后的文件上傳,原文件刪除,這樣的做法是不是有點(diǎn)太麻煩了,這里就牽扯另一個(gè)問(wèn)題了,重要點(diǎn)。

1 MONGODB GRIDFS使用它的目的是在文件的分發(fā)和權(quán)限的控制,以及文件的高可用和復(fù)用,多版本文件分發(fā)等等功能,這些功能都是文件系統(tǒng)不能給與你的

2 文件系統(tǒng)固然比GRIDFS 要方便,但如果你需要上面的功能,必須妥協(xié)。

經(jīng)常聽到有些質(zhì)疑聲,站在A 點(diǎn) 說(shuō)B 點(diǎn)好,而B 點(diǎn)達(dá)不到你的要求,魚和熊掌兼得,技術(shù)上當(dāng)然是兼得最好,但要搞清楚主次,那些是你必須的,那些是可以舍棄的,幻想和理想,也僅僅就差一個(gè)字。

以上就是MONGODB  GridFS存儲(chǔ)文件與文件系統(tǒng)存儲(chǔ)的區(qū)別是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI