欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB中單對象大小超16M的存儲方案

 更新時間:2025年01月26日 10:09:37   作者:yuanpan  
在 MongoDB 中,單個文檔的大小限制為 16MB,如果某個對象(文檔)的大小超過 16MB該怎么辦,所以本文給大家介紹了MongoDB中單對象大小超16M的存儲方案,需要的朋友可以參考下

在 MongoDB 中,單個文檔的大小限制為 16MB。如果某個對象(文檔)的大小超過 16MB,可以通過以下幾種方案解決:

1. 使用 GridFS

適用場景:需要存儲大文件(如圖像、視頻、文檔等)。

原理

  • MongoDB 的 GridFS 是一種專門用于存儲超過 16MB 文件的工具。
  • 它會將大文件分割成多個 chunk(默認大小 255KB),并存儲在兩個集合中:
    • fs.files:存儲文件的元數(shù)據(jù)(如文件名、大小、類型等)。
    • fs.chunks:存儲文件的內(nèi)容分塊。

實現(xiàn)步驟

存儲大文件 使用 MongoDB 驅(qū)動的 GridFS 工具存儲文件。

Python 示例

from pymongo import MongoClient
from gridfs import GridFS
 
client = MongoClient("mongodb://localhost:27017")
db = client.myDatabase
fs = GridFS(db)
 
# 存儲文件
with open("large_file.bin", "rb") as f:
    fs.put(f, filename="large_file.bin")

讀取大文件

# 讀取文件
file_data = fs.get_last_version(filename="large_file.bin")
with open("output.bin", "wb") as f:
    f.write(file_data.read())

2. 將文檔拆分為多個小文檔

適用場景:文檔包含大量嵌套數(shù)據(jù),導(dǎo)致總大小超過 16MB。

解決思路

  • 將大文檔拆分成多個子文檔。
  • 使用字段(如 _id 或 parentId)將這些子文檔關(guān)聯(lián)起來。

實現(xiàn)步驟

示例:拆分用戶日志記錄 原始大文檔(超 16MB):

{ "_id": "user1", "logs": [ { "timestamp": "2025-01-01", "action": "login" }, ... ] }

拆分為多個小文檔:

// 主文檔

{ "_id": "user1", "type": "userMetadata" }

// 子文檔

{ "parentId": "user1", "logs": [ { "timestamp": "2025-01-01", "action": "login" }, ... ] }

查詢時合并:

db.metadata.find({ _id: "user1" });

db.logs.find({ parentId: "user1" });

3. 使用 BSON 對象數(shù)組存儲引用

適用場景:需要在文檔中存儲大量關(guān)聯(lián)對象。

解決思路

  • 將大數(shù)組分割到其他集合中,主文檔存儲引用。

示例

大文檔超限前:

{ "_id": "project1", "name": "Big Project", "tasks": [ /* 超大量任務(wù)數(shù)據(jù) */ ] }

優(yōu)化后:

// 主文檔 
{ "_id": "project1", "name": "Big Project" } 
// 任務(wù)文檔 
{ "projectId": "project1", "taskId": 1, "taskName": "Task 1", ... }

查詢時通過 projectId 關(guān)聯(lián):

db.projects.find({ _id: "project1" }); db.tasks.find({ projectId: "project1" });

4. 壓縮數(shù)據(jù)

適用場景:文檔中包含重復(fù)數(shù)據(jù)或可壓縮結(jié)構(gòu)(如 JSON 數(shù)據(jù))。

解決思路

  • 在存儲之前壓縮數(shù)據(jù)(例如使用 GZIP、Zlib 等)。
  • 查詢時解壓數(shù)據(jù)。

示例

Python 實現(xiàn)

import zlib
from pymongo import MongoClient
 
client = MongoClient("mongodb://localhost:27017")
db = client.myDatabase
collection = db.myCollection
 
# 壓縮存儲
data = {"key": "value" * 10000}
compressed_data = zlib.compress(str(data).encode("utf-8"))
collection.insert_one({"_id": "compressed_doc", "data": compressed_data})
 
# 解壓讀取
doc = collection.find_one({"_id": "compressed_doc"})
decompressed_data = zlib.decompress(doc["data"]).decode("utf-8")

5. 修改數(shù)據(jù)結(jié)構(gòu)

適用場景:文檔設(shè)計冗余或結(jié)構(gòu)不合理。

解決思路

  • 簡化嵌套層級。
  • 使用更緊湊的數(shù)據(jù)類型(如數(shù)組代替對象)。

優(yōu)化前

{ "_id": "order1", "customer": { "id": 1, "name": "John Doe" }, "items": [ { "productId": "p1", "productName": "Product 1", "quantity": 2 } ] }

優(yōu)化后

{ "_id": "order1", "customerId": 1, "items": [ { "p": "p1", "q": 2 } ] }

6. 使用文件系統(tǒng)或其他存儲服務(wù)

適用場景:非結(jié)構(gòu)化大數(shù)據(jù)(如媒體文件、大型JSON)。

解決思路

  • 將大數(shù)據(jù)存儲到文件系統(tǒng)、Amazon S3、Azure Blob 等。
  • 在 MongoDB 中存儲文件路徑或 URL。

總結(jié)

  • 優(yōu)先選擇方案
    1. 使用 GridFS 存儲大文件。
    2. 拆分文檔 或 分表設(shè)計 解決超大文檔問題。
    3. 結(jié)合壓縮或外部存儲進一步優(yōu)化。

以上就是MongoDB中單對象大小超16M的存儲方案的詳細內(nèi)容,更多關(guān)于MongoDB單對象大小超16M的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs)

    mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs)

    這篇文章主要介紹了mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs),需要的朋友可以參考下
    2017-06-06
  • MongoDB數(shù)據(jù)庫安裝配置、基本操作實例詳解

    MongoDB數(shù)據(jù)庫安裝配置、基本操作實例詳解

    這篇文章主要介紹了MongoDB數(shù)據(jù)庫安裝配置、基本操作,結(jié)合實例形式詳細分析了MongoDB數(shù)據(jù)庫安裝配置具體步驟、相關(guān)命令與基本操作實現(xiàn)技巧,需要的朋友可以參考下
    2020-01-01
  • MongoDB可視化工具mongodb-compass

    MongoDB可視化工具mongodb-compass

    這篇文章介紹了MongoDB的可視化工具mongodb-compass,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 一次因mongo查詢不存在字段引發(fā)的事故記錄

    一次因mongo查詢不存在字段引發(fā)的事故記錄

    這篇文章主要給大家介紹了關(guān)于一次因mongo查詢不存在字段引發(fā)的事故記錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MongoDB系列教程(三):Windows中下載和安裝MongoDB

    MongoDB系列教程(三):Windows中下載和安裝MongoDB

    這篇文章主要介紹了MongoDB系列教程(三):MongoDB下載和安裝,本文講解使用Windows環(huán)境安裝MongoDB,需要的朋友可以參考下
    2015-05-05
  • 在MongoDB中實現(xiàn)時間范圍查詢的代碼詳解

    在MongoDB中實現(xiàn)時間范圍查詢的代碼詳解

    MongoDB作為一個高性能、開源、無模式的文檔型數(shù)據(jù)庫,廣泛應(yīng)用于各種需要靈活數(shù)據(jù)模型的應(yīng)用場景中,在處理與時間相關(guān)的數(shù)據(jù)時,MongoDB提供了強大的查詢能力,本文將詳細介紹如何在MongoDB中執(zhí)行時間范圍查詢,需要的朋友可以參考下
    2024-08-08
  • mongodb數(shù)據(jù)庫實驗之增刪查改

    mongodb數(shù)據(jù)庫實驗之增刪查改

    這篇文章主要介紹了mongodb數(shù)據(jù)庫實驗之增刪查改的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MongoDB模糊查詢操作案例詳解(類關(guān)系型數(shù)據(jù)庫的 like 和 not like)

    MongoDB模糊查詢操作案例詳解(類關(guān)系型數(shù)據(jù)庫的 like 和 not like)

    這篇文章主要介紹了MongoDB的模糊查詢操作(類關(guān)系型數(shù)據(jù)庫的 like 和 not like) ,本文通過代碼案例分析給大家介紹的非常詳細,具有一定的參考借鑒價值,,需要的朋友可以參考下
    2019-07-07
  • MongoDB的PHP驅(qū)動方法與技巧

    MongoDB的PHP驅(qū)動方法與技巧

    這篇文章主要介紹了MongoDB的PHP驅(qū)動方法與技巧,需要的朋友可以參考下
    2014-07-07
  • mac下安裝和配置mongodb的步驟詳解

    mac下安裝和配置mongodb的步驟詳解

    大家都知道MongoDB是一個跨平臺的,面向文檔的數(shù)據(jù)庫,提供高性能,高可用性和可擴展性方便。那么下面這篇文章就來給大家介紹了關(guān)于在mac系統(tǒng)下安裝和配置mongodb的方法步驟,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論