MongoDB图片保存问题



  • 我想将图片转换成二进制资料保存在MongoDB集合的某个栏位里,而不是使用GridFS的方式,请问如何实现呢?操作语言是nodeJS


  • 註冊用戶

    BSON格式存入,V3.4 的單一文件限制為 16MB 太大的無法塞入。


  • Lv 1

    @x4_965be

    ```

        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();
            });
            
        });

    ```


  • Lv 1

    很好的範例, 收藏了


  • 註冊用戶

    又學習到了一個好的圖片儲存方式

    已收藏


  • 註冊用戶

    圖片轉成 binary 大小會變大,容易受到單一文件16MB的限制,不建議使用 BSON 方式保存


  • Lv 1

    @yea

    圖片轉 binary 變大的依據是什麼?


  • 註冊用戶

    @22265

    這裡所謂的變大有兩種情況

    1. 因為是組成 json 格式,再加上其他欄位的資料一起存放,就會變大

    2. 通常儲存過程中會依據需求做轉換,像是使用 base64 加以處理來讓前端可以直接使用,此時儲存的內容就會變大


  • Lv 1

    @yea

    1. 這點可以理解. 不過不含一些 metadata 就沒辦法識別這頹資料是什麼了. 而且小檔比存 GridFS 更有效率

    2. 既然用了 BSON 當然是存 binary raw data, 轉 base64 成字串是多餘的


  • 註冊用戶

    @22265

    1. 不是很清楚這裡的需求圖片檔案有多大,一般而言目前相機越來越高階,照片的檔案也越來越大,若設計上能確定圖片都是小檔案,當然就不需要使用 GridFS

    2. 所以才會說是依需求轉換,不會是多餘的動作喔

    另外我不確定大圖片在轉換成二進制資料會不會花很多時間,這也是個需考量的點


  • Lv 1

    @yea

    圖片本身就是 binary ... 不需要轉吧


  • 註冊用戶

    圖片檔應該直接塞就可以了,以前只能存文字的欄位才先轉 base64。


  • 註冊用戶

    不是很了解圖片直接放入的好處是什麼,可以舉個例子嗎?


  • Lv 1

    其實圖片還是建議用GridFS

    [轉]

    GridFS會直接利用業已建立的複製或分片機制,所以對於檔存儲來說故障恢復和擴展都很容易。
    GridFS可以避免用於存儲使用者上傳內容的檔案系統出現的某些問題。例如,GridFS在同一個目錄下放置大量的檔是沒有任何問題的。
    GridFS不產生磁片碎片,因為MongoDB分配資料檔案空間時以2GB為一塊。
    使用場景:如果你的系統有如下情景:
    1) 有大量的上傳圖片(使用者上傳或者系統本身的檔發佈等)
    2) 檔的量級處於飛速增長,有可能打到單機作業系統自己的檔案系統的查詢性能瓶頸,甚至超過單機硬碟的擴容範圍.
    3) 檔的備份(不適用gridfs這種三方也可以做,但是不盡方便),檔案系統訪問的容錯移轉和修復..
    4) 檔的索引,存儲除檔本身以外還需要關聯更多的中繼資料資訊(比如,不僅僅存儲檔,還要保存一些檔的發佈式作者/發佈時間/檔tag屬性等等自訂資訊)並且需要索引的...
    5) 基於4),對檔的分類模糊,如果採用作業系統的檔案系統,資料夾分類關係混亂或者無法分類時..
    6) 當前系統是基於web的,對圖片的訪問根據url了規則路由的..(普通檔案系統也可以)
    7) 檔尺寸較小,而且眾多,且檔有可能被遷移/刪除等..


  • 註冊用戶

    @leo  

    2015中國資料庫大會Mongodb分享

    MongoDB的GridFS功能,性能沒有傳統的文件系統高,建議使用文件系統來存儲文件,再用MongoDB來存儲該文件的元數據。 

    原文網址:https://read01.com/MJ5MA3.html

    可是根據上面這篇文章分享的內容,似乎是建議存在文件系統裡,所以到底應該要怎麼存比較好,搞得我好亂啊

    另外新版的MongoDB好像沒有再針對GridFS做太多的改善,會不會哪天突然宣布不支持GridFS了啊


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待