[英]Store files in mongodb with Nodejs
我將文件保存在服務器的FS上,現在我想將它們保存在mongodb中。(為了更容易備份和填充)。我想存儲最大4-5Mb的文件,我嘗試使用帶有緩沖類型的mongoose保存它們。我成功保存並檢索了它們但是當我保存並檢索4或5Mb等文件時,我注意到性能顯着降低。
我的架構:
let fileSchema = new Schema({
name: {type: String, required: true},
_announcement: {type: Schema.Types.ObjectId, ref: 'Announcements'},
data: Buffer,
contentType: String
});
我如何從expressjs服務器檢索它們:
let name = encodeURIComponent(file.name);
res.writeHead(200, {
'Content-Type': file.contentType,
'Content-Disposition': 'attachment;filename*=UTF-8\'\'' + name
});
res.write(new Buffer(file.data));
我的問題是我應該使用一些zlib壓縮函數,如'deflate'來壓縮緩沖區,然后再將它們保存在mongodb中,然后在將它們發送到客戶端之前解壓縮二進制文件? 這會讓整個過程變得更快嗎?我錯過了什么嗎?
您似乎正在嘗試使用mongoDb保存大量信息。
我可以為您的案例考慮3種不同的選擇
GridFS不是將文件存儲在單個文檔中,而是將文件分成多個部分或塊[1],並將每個塊存儲為單獨的文檔。 默認情況下,GridFS使用默認的塊大小255 kB; 也就是說,GridFS將文件分成255 kB的塊,但最后一個塊除外。
接下來他們說在什么情況下你可以用這種方式存儲信息:
在某些情況下,在MongoDB數據庫中存儲大文件可能比在系統級文件系統上更高效。
- 如果文件系統限制目錄中的文件數,則可以使用GridFS根據需要存儲任意數量的文件。
- 如果要從大型文件的各個部分訪問信息而無需將整個文件加載到內存中,可以使用GridFS調用文件的各個部分,而無需將整個文件讀入內存。
- 如果要保持文件和元數據在多個系統和設施中自動同步和部署,可以使用GridFS。 使用地理位置分散的副本集時,MongoDB可以自動將文件及其元數據分發到許多mongod實例和工具。
希望它有用:)
我建議你使用GridFS
它更快,更容易使用。
有關詳細信息,請查看此URL: https : //docs.mongodb.com/manual/core/gridfs/ 。
如果您對GridFS
有任何疑問, GridFS
告訴我。
如果您絕對認為必須將圖像存儲在數據庫中而不是存儲在文件系統或其他雲服務中,我不會對此發表評論。
關於您的具體問題,GridFS是人們在生產中使用的一個值得尊敬的選擇,並且很好地實現了它的目的。 幾年前我個人使用它,但我的用例改變了,因此轉移到另一種媒介。 (請查看人們討論其性能的SO鏈接)
令人擔憂的是,你有4mb的圖像,除非你提供的圖像對質量和大分辨率有很大的依賴性 - 這不應該發生。 請在存儲之前壓縮圖像,在前端或后端(您的選擇)上進行壓縮,如果您在前端壓縮它們,那么它將減少數據包的傳輸時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.