以下內容是有關MongoDB的單個集合在硬體和軟體上的限制。
BSON文檔
單個Bson文檔最大為16M。該限制是為了保證單個文檔不會佔用過多RAM、在網路傳輸過程中不會佔用過多頻寬。MongoDB提供了GridFS來儲存超過該限制的文檔。具體可參考mongofiles。
Bson文檔的最深內嵌深度為100。
命名空間(namespaces)
每個命名空間長度必須小於123 bytes。
命名空間的數量為命名空間檔案大小(位元組數)/628。一個16M的命名空間檔案可以儲存大約24000個命名空間。每一個集合和索引都是一個命名空間
命名空間檔案大小必須小於2047M,預設為16M,可以使用nsSize屬性配置。
索引
索引鍵限制
索引條目的大小不得超過1024bytes。
2.6版本對索引的其他限制
如果現有文檔的索引條目超過索引鍵限制,MongoDB 不會在一個集合上建立索引。以前版本將建立索引,但不能檢索些文檔。
如果索引的欄位的索引條目超過索引鍵限制,重建索引將出錯。compact和repairDatabase命令以及db.collection.reIndex()方法都會重建索引。因為這些操作將會從集合中刪除所有索引,然後按順序重新建立它們,索引鍵限制的錯誤將會阻止這些操作的重建任何剩餘需要建立的索引;不過repairDatabase 命令會忽略這些錯誤,繼續執行除建立索引之外的其他動作。
如果MongoDB試圖往已經超過索引鍵的集合插入入資料,則報錯。以前版本仍會插入成功但不會被索引檢索。
對已經建索引的欄位進行修改操作,如果修改後的值導致索引條目超過限制則報錯。
mongorestore和mongoimport也不能對索引鍵超過限制的集合進行插入操作。
在該版本中,複製集的從節點仍然可以複製文檔,即使該文檔的索引鍵已經超出限制,不過會列印警告資訊日誌。也能夠對超過索引鍵限制的集合繼續建索引和重建索引,不過會列印警告資訊日誌。
對於已經分區的集合,如果索引已經超過索引鍵限制,那麼塊合併作業將會失敗。
每個集合的索引數量限制
單個集合的索引數量不得超過64個。
索引名稱長度限制
索引的完全限定名,包括命名空間和點操作符的長度不得超過128字元。索引名稱格式:<database name>.<collection name>.$<index name>。預設情況下<index name>由被索引的欄位名和索引類型組成。也可以使用ensureIndex()方法自訂這部分。
複合索引欄位數量限制
至多能同時對31個欄位建複合索引。
資料
在建立集合時,如果指定集合大小(使用max屬性指定,max必須小於2的32次冪),那麼集合則為固定集合(capped collection),即capped collection的文檔數最大為max。如果沒有指定集合大小,理論上講集合中文檔數量無上限。
資料大小
一個單一的 mongod 執行個體無法管理超過由底層作業系統提供的最大虛擬記憶體地址空間的資料集。
虛擬記憶體限制
作業系統 |
記錄日誌 |
不記錄日誌 |
Linux |
64T |
128T |
Windows Server 2012 R2 and Windows 8.1 |
64T |
128T |
Windows (otherwise) |
4T |
8T |
資料庫集合數量
集合在一個資料庫中的最大數目是命名空間的檔案和資料庫中的集合的索引的數目大小的函數。
複製集
複製整合員數量
複製整合員個數最多12個。
具有表決權的複製整合員數量
在需要表決時,至多7個成員有表決權。
自動建立的oplog的大小
如果沒有主動指定oplog大小,MongoDB建立的oplog不得超過50G。
分區叢集
分區操作限制
group彙總操作不能用在分區叢集環境上,如果需要彙總功能,需要用mapReduce和aggregate代替。
$isolated、db.eavl()、$snapshot、geoSearch命令都不支援在分區環境。
$where操作不支援嵌套。
索引覆蓋查詢
分區環境下不支援索引覆蓋查詢。
對已存在的集合資料進行分區
對於已經存在資料的集合,在其大小小於256G之前都支援分區操作。
對分區集合的單文檔的更新操作
對分區集合的所有update()和remove(),在指定了justOne或者multi:false屬性後查詢條件必須包含片鍵欄位或者或者_id欄位。
分區集合的唯一性索引
MongoDB不支援分區集合的唯一性索引,除非以完整的片鍵作為索引的首碼。這種情況下的索引就是全域唯一性索引。
能夠合并的塊的文檔數限制
如果一個塊的文檔數超過250000個或者超過塊大小的1.3倍,那麼該塊將無法移動。
片鍵限制
片鍵大小
片鍵大小不得超過512bytes。
片鍵索引類型
片鍵索引可以是升序索引,以片鍵開始的複合升序索引或者雜湊索引。
片鍵索引不能是multikey index,text index或者geospatial index。
片鍵不可改變
在分區之後片鍵不允許更改。
如果必須更改片鍵則需要:
dump所有資料
drop原始片鍵集合
使用新的片鍵配置分區
劃分區鍵範圍(制定分區規則)
重新匯入資料
片索引值不可更改
一旦集合分區成功,則片鍵的值都是不允許修改的。
單調性的分區鍵可以限制插入的輸送量
對於需要頻繁插入的叢集,片鍵的單調遞增或遞減能夠影響插入的輸送量。如果你的分區鍵是 _id 欄位,請注意 _id 欄位的預設值是 ObjectIds 具有普遍增加值。
當插入帶有單調遞增或遞減片鍵的文檔時,所有的插入操作都將在一個分區的一個塊上執行。插入完成後系統將會分割塊並遷移資料以保證資料的均勻性分布。
如果該叢集上的熱點操作時修改和讀取資料,則該限制不會影響叢集。
為了避免這個問題,使用雜湊片鍵或者選擇的片索引值不是單調性。
操作符
文檔排序
對沒有建索引的欄位,如果排序階段產生的結果集大於32M則報錯。
彙總管道操作
管道各個階段的記憶體使用量不能超過100M。如果進行大資料彙總操作可以將屬性allowDiskUse設定成true。
寫命令操作的資料大小限制
寫命令不能大於1000個操作,MongoDB的Bulk()操作和驅動程式中比較相關的函數沒有該限制。
命名限制
資料庫名稱區分大小寫
資料庫名稱區分大小寫
Windows作業系統上資料庫名稱限制
名稱不得包含以下字元
/\. "*<>:|?和Null 字元
Unix或Linux作業系統上資料庫名稱限制
名稱不得包含以下字元
/\. "和Null 字元
資料庫命令長度
長度不能超過64個字元
集合名稱限制
集合名稱必須以_和字元開頭,不能包含$、Null 字元,不能以system.開頭。
欄位名稱限制
欄位名稱不能包含.$Null 字元
(url: http://blog.csdn.net/y943623901/article/details/41869071)