最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)據(jù)模型的設(shè)計模式及優(yōu)缺點

    MongoDB??數(shù)據(jù)模型的設(shè)計模式及優(yōu)缺點

    這篇文章主要介紹了MongoDB??數(shù)據(jù)模型的設(shè)計模式,在實際開發(fā)中,大多數(shù)性能問題都可以追溯到糟糕的模型設(shè)計,官方也提供分享過文檔模型設(shè)計的進階技巧,這里簡單翻譯記錄一下,需要的朋友可以參考下
    2022-12-12
  • mongodb實現(xiàn)數(shù)組對象求和方法實例

    mongodb實現(xiàn)數(shù)組對象求和方法實例

    這篇文章主要給大家介紹了關(guān)于mongodb實現(xiàn)數(shù)組對象求和的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • MongoDB中創(chuàng)建索引需要注意的事項

    MongoDB中創(chuàng)建索引需要注意的事項

    這篇文章主要介紹了MongoDB中創(chuàng)建索引需要注意的事項,本文講解了創(chuàng)建索引可能會引發(fā)的問題并給出解決方法,需要的朋友可以參考下
    2015-03-03
  • 阿里云服務(wù)器部署mongodb的詳細過程

    阿里云服務(wù)器部署mongodb的詳細過程

    這篇文章主要介紹了阿里云服務(wù)器部署mongodb的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Linux系統(tǒng)下MongoDB的簡單安裝與基本操作

    Linux系統(tǒng)下MongoDB的簡單安裝與基本操作

    這篇文章主要介紹了Linux系統(tǒng)下MongoDB的簡單安裝與基本操作,需要的朋友可以參考下
    2015-04-04
  • Java操作MongoDB數(shù)據(jù)庫方法詳解

    Java操作MongoDB數(shù)據(jù)庫方法詳解

    本文給大家分享的是使用Java操作MongoDB的一些基本方法,包含多種數(shù)據(jù)庫的連接方式,增刪改查等方法,非常的實用,有需要的小伙伴可以參考下
    2018-01-01
  • Win10 64位安裝MongoDB數(shù)據(jù)庫的詳細教程

    Win10 64位安裝MongoDB數(shù)據(jù)庫的詳細教程

    這篇文章主要介紹了Win10 64位安裝MongoDB數(shù)據(jù)庫的詳細教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Ubuntu環(huán)境下mongodb安裝配置詳細步驟

    Ubuntu環(huán)境下mongodb安裝配置詳細步驟

    大家好,本篇文章主要講的是Ubuntu環(huán)境下mongodb安裝配置詳細步驟,感興趣的同學快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-11-11
  • Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫

    Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫

    這篇文章介紹了Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • MongoDB數(shù)據(jù)庫聚合之分組統(tǒng)計$group的用法詳解

    MongoDB數(shù)據(jù)庫聚合之分組統(tǒng)計$group的用法詳解

    在MongoDB中聚合框架允許用戶對數(shù)據(jù)進行處理和分析,以便進行統(tǒng)計計算、匯總以及更復(fù)雜的數(shù)據(jù)轉(zhuǎn)換,這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫聚合之分組統(tǒng)計$group的用法的相關(guān)資料,需要的朋友可以參考下
    2024-06-06

最新評論

泾川县| 遂溪县| 高尔夫| 镇巴县| 锡林郭勒盟| 延津县| 高雄市| 丰宁| SHOW| 博白县| 三穗县| 利津县| 卓尼县| 衢州市| 资阳市| 佛教| 安阳市| 英超| 镇康县| 杭锦后旗| 綦江县| 谢通门县| 新晃| 金华市| 桂阳县| 金沙县| 宜良县| 喜德县| 蕉岭县| 吉林省| 滦南县| 城口县| 朝阳区| 武清区| 荣昌县| 丽水市| 大荔县| 安顺市| 巫山县| 施甸县| 金山区|