MongoDB 最大文件大小
本教程描述了在 MongoDB 中儲存文件的預設最大大小限制。如果資料超過大小限制,它還會教育替代解決方案。
我們還將瞭解如何有效使用 BSON 文件的預設最大大小限制。
MongoDB 最大文件大小
在 MongoDB 中,文件(物件)以 BSON 格式儲存。BSON(Binary JSON
)是類 JSON 文件的二進位制序列化。
使用這種格式,我們可以使用不同的擴充套件來使用不屬於 JSON 的資料型別的各種表示。
例如,我們在 BSON 中有一個 Date
和 BinData
型別,這在 JSON 中不可用。根據 MongoDB 文件,單個 BSON 文件的大小限制為 16MB
。
我們有文件的最大大小限制,以確保一個文件在傳輸過程中不能使用不受限制的 RAM 量或頻寬。請記住,我們可以將 BSON 文件巢狀多達 100 個級別,其中每個陣列/物件新增一個級別。
在當今世界,我們周圍都有資料。因此,我們的資料可能會增加 16 兆位元組的 BSON 文件的大小限制。
在這種情況下,MongoDB 通過提供 GridFS
API 來幫助我們儲存大於 16MB
的文件。
什麼是 GridFS
API
GridFS
是一個 MongoDB 規範,我們可以使用它來儲存和訪問超過 BSON 文件限制 (16MB
) 的大檔案,例如音訊、視訊或影象檔案。它類似於用於儲存檔案的檔案系統,但資料儲存在 MongoDB 集合中。
GridFS
API 將檔案分成塊並將每個資料塊儲存在單獨的文件中,其中每個文件的大小為 255KB
。GridFS
預設包含兩個集合,fs.files
和 fs.chunks
,儲存檔案的後設資料和塊。
每個塊都由唯一的 _id
(ObjectId
)欄位識別,而 fs.files
用作父文件。fs.chunks
文件中的 files_id
欄位將塊連結到其父級。
你可以通過 this 文章瞭解使用 GridFS
時的語法。
有效地使用預設 BSON 文件大小限制
BSON 文件大小限制 (16MB
) 很大。例如,War of the Worlds
的整個未壓縮文字只有 364k
(HTML),但總是有例外。
如果你的資料超過限制,你可以使用我們之前討論過的 GridFS
API 或制定有效使用 16MB
的策略。
讓我們有一個場景,我們想要開發一個 XYZ 應用程式。應用程式需要四種資料型別——Booleans
、numbers
、strings
和 dates
(表示為 UNIX ms)。
由於有 16MB
的大小限制,MongoDB 可以輕鬆儲存大約 200 萬個 64 位
數字值(日期
和 布林值
也是如此)。
在這裡,string
型別值需要特別注意,因為每個 UTF-8 字元佔用一個 byte
。我們需要優化所有包含 string
型別值的列的大小。
我們可以嘗試以下方法來減小具有 string
型別值的列的大小。
-
我們可以使用
stringify()
和zip()
方法作為zip(JSON.stringify(column.values));
。 -
我們可以建立一個字典,並將所有唯一的
string
型別值插入到字典中。然後,用索引替換字串值。如果我們在一個欄位中有許多重複的字串值,這種方法很有用。如果有人想儲存一列雜湊,這種方法將無濟於事,但他們可以使用
GridFS
API。 -
我們還可以將列拆分成不同的塊,並將這些塊儲存在連結到主文件的其他一些文件中。
有一篇參考文章展示了所有這些方法。