MongoDB限制与阈值
以下內容是有關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操作系統上數據庫名稱限制
名稱不得包含以下字符
/\.?"*<>:|?和空字符
Unix或Linux操作系統上數據庫名稱限制
名稱不得包含以下字符
/\.?"和空字符
數據庫命令長度
長度不能超過64個字符
集合名稱限制
集合名稱必須以_和字符開頭,不能包含$、空字符,不能以system.開頭。
字段名稱限制
字段名稱不能包含.$空字符
(url: http://blog.csdn.net/y943623901/article/details/41869071)
總結
以上是生活随笔為你收集整理的MongoDB限制与阈值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个阿里云 MYSQL 服务 RDS 下
- 下一篇: Quest 公司的Shareplex 与