MongoDB 是無模式,因為它以文件的形式儲存數據,通常使用 BSON(二進位 JSON)。集合中的每個文件都可以有自己的結構,這意味著不需要預先定義欄位及其資料類型。
範例:
這種靈活性使 MongoDB 能夠適應不斷變化的資料模型,而無需修改架構。
MongoDB 提供了兩種主要方法來建模文件之間的關係:嵌入 和 引用。
嵌入:在單一文件中儲存相關資料。
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
引用:將相關資料儲存在單獨的文件中並使用引用(即ObjectId)來連結它們。
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
一對多關係通常透過將「多」項嵌入「一個」文件或透過引用來建模。
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
上限集合 是一個固定大小的集合,當達到其大小限制時,它會自動覆蓋最舊的文件。上限集合非常適合最新資料最重要的場景,例如日誌或事件資料。
特徵:
範例:
建立一個大小限制為 1MB 且最多 1000 個文件的上限集合:
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
在 MongoDB 中,文件大小 可以直接影響效能。文件的最大大小為 16MB。接近此大小的文件可能:
為了提高效能,保持文件緊湊並避免過度成長非常重要,特別是在高寫入環境中。
反規範化涉及跨多個文件複製資料以減少連接的需要。透過嵌入相關數據,MongoDB 可以避免執行多個查詢或聯接,從而加快讀取速度。
範例:不要在訂單中引用產品,而是將產品詳細資訊直接嵌入訂單文件中:
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
GridFS 是用於在 MongoDB 中儲存和檢索大檔案(大於 16MB)的規格。它將大檔案分割成區塊(通常為 255KB),並將它們儲存為文件儲存在兩個集合中:fs.files 和 fs.chunks。
範例:儲存大影像檔案:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
對於層次結構資料,您可以根據層次結構的深度和複雜性使用嵌入或引用。
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
TTL 索引會在指定時間段後自動從集合中刪除文檔,這對於會話資訊或日誌等過期資料非常有用。
文法:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
多對多重關係可以透過在每個文件中嵌入引用數組或建立第三個集合來儲存關係來建模。
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
db.createCollection("logs", { capped: true, size: 1048576, max: 1000 })
MongoDB 提供靈活的模式設計功能,使其能夠適應各種用例,包括複雜的關係和資料建模策略。正確的架構設計選擇可以提高應用程式的效能和可擴展性。
嗨,我是 Abhay Singh Kathayat!
我是一名全端開發人員,精通前端和後端技術。我使用各種程式語言和框架來建立高效、可擴展且用戶友好的應用程式。
請隨時透過我的商務電子郵件與我聯繫:kaashshorts28@gmail.com。
以上是在 MongoDB 中設計高效率的資料模型:無模式、關係和效能最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!