MongoDB图片保存问题
-
我想将图片转换成二进制资料保存在MongoDB集合的某个栏位里,而不是使用GridFS的方式,请问如何实现呢?操作语言是nodeJS
-
BSON格式存入,V3.4 的單一文件限制為 16MB 太大的無法塞入。
-
```
const mgo = require('mongodb');
let bindata = mgo.Binary('binary data');
mgo.MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
db.collection('bdata').insertOne( {
data: bindata
}, (err, r)=>{
db.close();
});
});```
-
很好的範例, 收藏了
-
又學習到了一個好的圖片儲存方式
已收藏
-
圖片轉成 binary 大小會變大,容易受到單一文件16MB的限制,不建議使用 BSON 方式保存
-
圖片轉 binary 變大的依據是什麼?
-
這裡所謂的變大有兩種情況
1. 因為是組成 json 格式,再加上其他欄位的資料一起存放,就會變大
2. 通常儲存過程中會依據需求做轉換,像是使用 base64 加以處理來讓前端可以直接使用,此時儲存的內容就會變大
-
1. 這點可以理解. 不過不含一些 metadata 就沒辦法識別這頹資料是什麼了. 而且小檔比存 GridFS 更有效率
2. 既然用了 BSON 當然是存 binary raw data, 轉 base64 成字串是多餘的
-
1. 不是很清楚這裡的需求圖片檔案有多大,一般而言目前相機越來越高階,照片的檔案也越來越大,若設計上能確定圖片都是小檔案,當然就不需要使用 GridFS
2. 所以才會說是依需求轉換,不會是多餘的動作喔
另外我不確定大圖片在轉換成二進制資料會不會花很多時間,這也是個需考量的點
-
圖片本身就是 binary ... 不需要轉吧
-
圖片檔應該直接塞就可以了,以前只能存文字的欄位才先轉 base64。
-
不是很了解圖片直接放入的好處是什麼,可以舉個例子嗎?
-
其實圖片還是建議用GridFS
[轉]
GridFS會直接利用業已建立的複製或分片機制,所以對於檔存儲來說故障恢復和擴展都很容易。
GridFS可以避免用於存儲使用者上傳內容的檔案系統出現的某些問題。例如,GridFS在同一個目錄下放置大量的檔是沒有任何問題的。
GridFS不產生磁片碎片,因為MongoDB分配資料檔案空間時以2GB為一塊。
使用場景:如果你的系統有如下情景:
1) 有大量的上傳圖片(使用者上傳或者系統本身的檔發佈等)
2) 檔的量級處於飛速增長,有可能打到單機作業系統自己的檔案系統的查詢性能瓶頸,甚至超過單機硬碟的擴容範圍.
3) 檔的備份(不適用gridfs這種三方也可以做,但是不盡方便),檔案系統訪問的容錯移轉和修復..
4) 檔的索引,存儲除檔本身以外還需要關聯更多的中繼資料資訊(比如,不僅僅存儲檔,還要保存一些檔的發佈式作者/發佈時間/檔tag屬性等等自訂資訊)並且需要索引的...
5) 基於4),對檔的分類模糊,如果採用作業系統的檔案系統,資料夾分類關係混亂或者無法分類時..
6) 當前系統是基於web的,對圖片的訪問根據url了規則路由的..(普通檔案系統也可以)
7) 檔尺寸較小,而且眾多,且檔有可能被遷移/刪除等..
-
2015中國資料庫大會Mongodb分享
MongoDB的GridFS功能,性能沒有傳統的文件系統高,建議使用文件系統來存儲文件,再用MongoDB來存儲該文件的元數據。
原文網址:https://read01.com/MJ5MA3.html
可是根據上面這篇文章分享的內容,似乎是建議存在文件系統裡,所以到底應該要怎麼存比較好,搞得我好亂啊
另外新版的MongoDB好像沒有再針對GridFS做太多的改善,會不會哪天突然宣布不支持GridFS了啊