MongoDB限制与阈值
以下內(nèi)容是有關(guān)MongoDB的單個集合在硬件和軟件上的限制。
BSON文檔
單個Bson文檔最大為16M。該限制是為了保證單個文檔不會占用過多RAM、在網(wǎng)絡(luò)傳輸過程中不會占用過多帶寬。MongoDB提供了GridFS來保存超過該限制的文檔。具體可參考mongofiles。
Bson文檔的最深內(nèi)嵌深度為100。
?
命名空間(namespaces)
每個命名空間長度必須小于123?bytes。
命名空間的數(shù)量為命名空間文件大小(字節(jié)數(shù))/628。一個16M的命名空間文件可以保存大約24000個命名空間。每一個集合和索引都是一個命名空間
命名空間文件大小必須小于2047M,默認(rèn)為16M,可以使用nsSize屬性配置。
?
索引
索引鍵限制
索引條目的大小不得超過1024bytes。
2.6版本對索引的其他限制
如果現(xiàn)有文檔的索引條目超過索引鍵限制,MongoDB?不會在一個集合上創(chuàng)建索引。以前版本將創(chuàng)建索引,但不能檢索些文檔。
如果索引的字段的索引條目超過索引鍵限制,重建索引將出錯。compact和repairDatabase命令以及db.collection.reIndex()方法都會重建索引。因為這些操作將會從集合中刪除所有索引,然后按順序重新創(chuàng)建它們,索引鍵限制的錯誤將會阻止這些操作的重建任何剩余需要創(chuàng)建的索引;不過repairDatabase?命令會忽略這些錯誤,繼續(xù)執(zhí)行除創(chuàng)建索引之外的其他操作。
如果MongoDB試圖往已經(jīng)超過索引鍵的集合內(nèi)插入數(shù)據(jù),則報錯。以前版本仍會插入成功但不會被索引檢索。
對已經(jīng)建索引的字段進(jìn)行修改操作,如果修改后的值導(dǎo)致索引條目超過限制則報錯。
mongorestore和mongoimport也不能對索引鍵超過限制的集合進(jìn)行插入操作。
在該版本中,復(fù)制集的從節(jié)點仍然可以復(fù)制文檔,即使該文檔的索引鍵已經(jīng)超出限制,不過會打印警告信息日志。也能夠?qū)Τ^索引鍵限制的集合繼續(xù)建索引和重建索引,不過會打印警告信息日志。
對于已經(jīng)分片的集合,如果索引已經(jīng)超過索引鍵限制,那么塊合并操作將會失敗。
每個集合的索引數(shù)量限制
單個集合的索引數(shù)量不得超過64個。
索引名稱長度限制
索引的完全限定名,包括命名空間和點操作符的長度不得超過128字符。索引名稱格式:<database?name>.<collection?name>.$<index?name>。默認(rèn)情況下<index?name>由被索引的字段名和索引類型組成。也可以使用ensureIndex()方法自定義這部分。
復(fù)合索引字段數(shù)量限制
至多能同時對31個字段建復(fù)合索引。
?
數(shù)據(jù)
在創(chuàng)建集合時,如果指定集合大小(使用max屬性指定,max必須小于2的32次冪),那么集合則為固定集合(capped?collection),即capped?collection的文檔數(shù)最大為max。如果沒有指定集合大小,理論上講集合中文檔數(shù)量無上限。
數(shù)據(jù)大小
一個單一的?mongod?實例無法管理超過由底層操作系統(tǒng)提供的最大虛擬內(nèi)存地址空間的數(shù)據(jù)集。
虛擬內(nèi)存限制
| 操作系統(tǒng) | 記錄日志 | 不記錄日志 |
| Linux | 64T | 128T |
| Windows?Server?2012?R2?and?Windows?8.1 | 64T | 128T |
| Windows?(otherwise) | 4T | 8T |
數(shù)據(jù)庫集合數(shù)量
集合在一個數(shù)據(jù)庫中的最大數(shù)目是命名空間的文件和數(shù)據(jù)庫中的集合的索引的數(shù)目大小的函數(shù)。
?
復(fù)制集
復(fù)制集成員數(shù)量
復(fù)制集成員個數(shù)最多12個。
具有表決權(quán)的復(fù)制集成員數(shù)量
在需要表決時,至多7個成員有表決權(quán)。
自動創(chuàng)建的oplog的大小
如果沒有主動指定oplog大小,MongoDB創(chuàng)建的oplog不得超過50G。
分片集群
分片操作限制
group聚合操作不能用在分片集群環(huán)境上,如果需要聚合功能,需要用mapReduce和aggregate代替。
$isolated、db.eavl()、$snapshot、geoSearch命令都不支持在分片環(huán)境。
$where操作不支持嵌套。
索引覆蓋查詢
分片環(huán)境下不支持索引覆蓋查詢。
對已存在的集合數(shù)據(jù)進(jìn)行分片
對于已經(jīng)存在數(shù)據(jù)的集合,在其大小小于256G之前都支持分片操作。
對分片集合的單文檔的更新操作
對分片集合的所有update()和remove(),在指定了justOne或者multi:false屬性后查詢條件必須包含片鍵字段或者或者_id字段。
分片集合的唯一性索引
MongoDB不支持分片集合的唯一性索引,除非以完整的片鍵作為索引的前綴。這種情況下的索引就是全局唯一性索引。
能夠合并的塊的文檔數(shù)限制
如果一個塊的文檔數(shù)超過250000個或者超過塊大小的1.3倍,那么該塊將無法移動。
?
片鍵限制
片鍵大小
片鍵大小不得超過512bytes。
片鍵索引類型
片鍵索引可以是升序索引,以片鍵開始的復(fù)合升序索引或者哈希索引。
片鍵索引不能是multikey?index,text?index或者geospatial?index。
片鍵不可改變
在分片之后片鍵不允許更改。
如果必須更改片鍵則需要:
dump所有數(shù)據(jù)
drop原始片鍵集合
使用新的片鍵配置分片
劃分片鍵范圍(制定分片規(guī)則)
重新導(dǎo)入數(shù)據(jù)
片鍵值不可更改
一旦集合分片成功,則片鍵的值都是不允許修改的。
單調(diào)性的分片鍵可以限制插入的吞吐量
對于需要頻繁插入的集群,片鍵的單調(diào)遞增或遞減能夠影響插入的吞吐量。如果你的分片鍵是?_id?字段,請注意?_id?字段的默認(rèn)值是?ObjectIds?具有普遍增加值。
當(dāng)插入帶有單調(diào)遞增或遞減片鍵的文檔時,所有的插入操作都將在一個分片的一個塊上執(zhí)行。插入完成后系統(tǒng)將會分割塊并遷移數(shù)據(jù)以保證數(shù)據(jù)的均勻性分布。
如果該集群上的熱點操作時修改和讀取數(shù)據(jù),則該限制不會影響集群。
為了避免這個問題,使用哈希片鍵或者選擇的片鍵值不是單調(diào)性。
?
操作符
文檔排序
對沒有建索引的字段,如果排序階段產(chǎn)生的結(jié)果集大于32M則報錯。
聚合管道操作
管道各個階段的內(nèi)存使用不能超過100M。如果進(jìn)行大數(shù)據(jù)聚合操作可以將屬性allowDiskUse設(shè)置成true。
寫命令操作的數(shù)據(jù)大小限制
寫命令不能大于1000個操作,MongoDB的Bulk()操作和驅(qū)動程序中比較相關(guān)的函數(shù)沒有該限制。
?
命名限制
數(shù)據(jù)庫名稱區(qū)分大小寫
數(shù)據(jù)庫名稱區(qū)分大小寫
Windows操作系統(tǒng)上數(shù)據(jù)庫名稱限制
名稱不得包含以下字符
/\.?"*<>:|?和空字符
Unix或Linux操作系統(tǒng)上數(shù)據(jù)庫名稱限制
名稱不得包含以下字符
/\.?"和空字符
數(shù)據(jù)庫命令長度
長度不能超過64個字符
集合名稱限制
集合名稱必須以_和字符開頭,不能包含$、空字符,不能以system.開頭。
字段名稱限制
字段名稱不能包含.$空字符
(url: http://blog.csdn.net/y943623901/article/details/41869071)
總結(jié)
以上是生活随笔為你收集整理的MongoDB限制与阈值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个阿里云 MYSQL 服务 RDS 下
- 下一篇: Quest 公司的Shareplex 与