在 MongoDB 中儲存影象
你可以使用資料庫將圖片和其他微小影象儲存在資料庫表中。這樣的圖片檔案可以在檔案伺服器上更有效地處理。
但是,當影象資料儲存在二進位制欄位中時,只有將原始圖片資料流式傳輸到該欄位和從該欄位流出的應用程式才能訪問它。
MongoDB GridFS 規範是在 MongoDB 中儲存相當大的檔案的可行選擇。它確保檔案被分解為可管理的位並儲存在資料庫中。
本文解釋了在 MongoDB 中儲存和檢索二進位制檔案的過程。
MongoDB 中的 GridFS
GridFS 是用於儲存和檢索比 BSON 設定的 16 MB 限制更大的檔案的標準。GridFS 將檔案拆分為部分或塊,並將每個部分分開,而不是將其儲存為單個文件。
在 Couchbase 中為每個專案儲存一個後設資料 JSON 文件,以及最多一個小縮圖。
該文件包含有關應用程式中該物件的資訊,你需要這些資訊並參考專門構建的物件儲存,例如 S3、檔案系統或 HDFS。因此,你將擁有兩全其美。
在這個 MongoDB 教程中,詳細討論了在 MongoDB 資料庫中儲存影象的問題。此外,你還將瞭解儲存影象和有效地從 MongoDB 資料庫中檢索影象的不同方法。
在 MongoDB 中使用 GridFS 儲存影象
你可以通過使用 Mongoose 建立模式將影象儲存在 MongoDB 資料庫中。模式是通過建立檔案 model.js
來定義的。
資料型別 Buffer
用於以陣列的資料庫形式儲存影象。
影象的儲存方式有以下三種:
- GridFS:使用 GridFS API,你將能夠儲存大尺寸影象。此 API 可幫助你將大檔案儲存為小塊 (255KiB) 並將其儲存到
"fs.chunks"
集合中的單獨文件中。 - 內聯:在這種情況下,較小的影象(16MB)可以使用二進位制資料儲存到 MongoDB 文件中。
- 參考:這裡只將圖片參考儲存在資料庫中,你也可以將圖片儲存在 API 或某些檔案系統中。
由於終端使用者難以訪問大檔案,因此將二進位制檔案儲存在資料庫中可以更輕鬆地在眾多站點之間分發。值得注意的是,在將照片儲存到資料庫之前,你應該考慮其好處。
在 MongoDB 中使用 Python 儲存影象
本節將討論如何通過 Python 在 MongoDB 中儲存影象。
你可以為此使用兩個庫:
-
GridFS
它是一個檔案系統,用於儲存和檢索大量資料,例如照片、音訊和電影。在這種情況下,將資料儲存在 MongoDB 集合中存在偏差。
此外,它可以儲存大於 16MB 規模限制的檔案。
-
PyMongo
Python 庫 PyMongo 與 MongoDB 資料庫連線。可以使用各種功能操作,例如檢索結果、寫入和刪除資料以及執行資料庫。
如果你沒有安裝 PyMongo 庫,你可以使用以下命令進行安裝:
pip3 install pymongo
你現在可以在安裝該庫後使用它。但是,首先,匯入庫,連線到伺服器以在 Python 中使用 MongoDB,並建立一個資料庫來儲存照片。
from pymongo import MongoClient
connection = MongoClient("localhost", 27017)
database = connection['DB_NAME']
MongoDB 預設在埠 27017 上執行。你可以在 DB_NAME
中為資料庫指定任何名稱。
GridFS 庫在以下階段將照片儲存在 MongoDB 資料庫中。
import gridfs
#Create an object of GridFs for the above database.
fs = gridfs.GridFS(database)
#Define an image object with the location.
file = "C:/Users/user/Pictures/dog.jpeg"
with open(file, 'rb') as f:
contents = f.read()
fs.put(contents, filename="file")
上述程式碼展示瞭如何使用 Python 將照片儲存在 MongoDB 資料庫中。
輸出:
- 在輸出右側可以看到我們成功構建了資料庫圖片。
- 資料庫有兩個子資料夾,分別標記為
fs.chunks
和fs.files
。 - 圖片以
ObjectID(('612727d8e71b2de49ac00734'),
儲存在fs.files
資料夾中,你可以在其中檢視所有圖片詳細資訊,例如_id、檔名、md5、塊大小、長度和上傳日期。