文章翻譯自來源:http://docs.mongodb.org/manual/reference/limits/#limit-bson-document-size
一、BSON 文檔
1、BSON文檔大小,最大限制為16MB,這種限制是為了確保單個文檔不會使用過多的RAM,或者在遷移期間不會占用過多的帶寬。為了保存大於該限制的文檔,mongodb提供了GridFS
當插入的文檔大於16MB時將得到如下的錯誤信息(java客戶端):com.mongodb.MongoInternalException: DBObject of size 30836631 is over Max BSON size 16777216
2、文檔的最大嵌套數為 100
二、名字空間
1、名字空間長度限制:包括數據庫與集合名稱,總共不能超過123字節
2、名字空間數量:
mongo為每個數據庫保存一個16MB的名字空間文件,dbname.ns ,每個名稱占用628字節,因此默認可以支持24000個名字空間(索引也占用一個名字空間)。
3、名字空間文件大小:最大不超過2048MB,默認為16MB,可以使用nssize選項進行配置。
三、索引
1、索引關鍵字:該字段的取值不能超過1024字節,否則不能添加到一個索引中。
2、集合的最大所有個數:64
3、索引名稱長度:包括數據庫於集合名稱總共不超過125字符。
4、聯合索引最大字段個數:31
5、不能聯合使用text索引與其他類型索引
四、帽子集合(Capped Collections)
1、帽子集合的最大文檔數:當在創建時候執行最大文檔數參數時,該值必須小於2的32次方。若在創建的時候沒有指定則文檔數不限制。
五、復制集
1、最大的復制集個數:12
2、復制集的投票成員個數:任何時刻最大只有7個成員擁有投票權
六、分片集群
1、在分片環境中不支持的操作:group、eval、$where $isolated $snapshot geoSearch
2、已存在數據的分片:對於已存在數據的集合,分片的最大支持數據為256GB. 在集群環境之中最大支持的分片集合大約為400GB。精確的閾值根據chunk於數據大小而定。(也就是說,如果要對已有的集合進行分片,那么要在其增長到256G之前進行)。
3、分片集合中的文檔更新:所有update、remove操作必須包括分片關鍵字或者id字段作為查詢字段。若沒有這些字段將失敗。
4、分片集合中的唯一索引:除非唯一索引關鍵字使用shard key作為前綴,否則不支持。當使用shardkey作為前綴時,mongo將強制整個key唯一,而非單一字段。 具體可參考:http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/
七、分片關鍵字限制
1、關鍵字不能超過512字節。
2、關鍵字不允許變更:若要修改可采用如下方式:
1)導出所有數據到另外的格式
2)刪除原來的分片集合
3)配置新的分片關鍵字
4)預先分割關鍵字范圍確保實現分布式
5)保存導出的數據到mongo之中。
3、關鍵字值不允許修改:當一個文檔已經插入到分片集合中后,涉及到分片關鍵字的字段不允許update。
4、單調遞增/遞減的分片關鍵字會限制插入效率:
如果使用_id字段作為分片關鍵字,由於該字段根據time遞增,因此這也是一個會影響插入效率的。當向單調遞增或遞減的分片關鍵字集合中插入數據時,所有的插入將會導入到同一個chunk同一個分片之中。
加入在集群中以讀取和更新占據主導,則這種限制並不影響集群。
為了避免這種限制,使用一個哈希分片關鍵字或者選擇一個非單調遞增遞減的字段。
八、操作
1、聯合多個$in操作:聯合多個in表達式,將可能觸發聯合索引的合並限制。如果符合的item大於等於4000000,mongo將產生“combinatorial limit of $in partitioning of result set exceeded” 錯誤。
九、命名限制
1、數據庫名稱是大小寫區別的:同時mongo也不允許兩個數據庫名稱僅僅為大小寫區別。
2、在windows下的數據庫名稱限制:/\. "*<>:|? 並且不能包括空格符。
3、在Unix Linux下的數據庫名稱限制:/\. " 同樣不能包括空格符。
4、數據庫名稱長度:64字節
5、集合名稱限制:
必須以下划線或者字母開頭,並且不能包括 $,引號,空格符,點號
6、字段名稱限制:
不能包括點號,$,與空格符。