【MongoDB】MongoDB限制和阈值 Limits and Thresholds

来源:互联网 发布:剑三萝莉精致捏脸数据 编辑:程序博客网 时间:2024/06/10 20:51

最近在思考mongodb每个文档最多能存多少东西,于是找到官方文档,得到了一些宝贵资料。用谷歌翻译翻译的文章,便于查看记录。

原文地址:https://docs.mongodb.com/manual/reference/limits/#limit-bson-document-size,喜欢看原文的去看这个链接就足够了。

BSON文件
BSON Document Size
最大的BSON文档大小为16兆字节。
最大文档大小有助于确保单个文档不能使用过多的RAM或在传输过程中带宽过大。为了存储大于最大大小的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参阅mongofiles和驱动程序文档。
Nested Depth for BSON Documents
MongoDB支持BSON文档不超过100个嵌套级别。
注:文档对应mysql数据库中的行row


命名限制
Database Name Case Sensitivity
由于数据库名称在MongoDB中不区分大小写,因此数据库名称只能通过字符的大小写而不同。
Restrictions on Database Names for Windows
对于在Windows上运行的MongoDB部署,数据库名称不能包含以下任何字符:
/ \。“$ * <>:|?
数据库名称也不能包含空字符。


Restrictions on Database Names for Unix and Linux Systems
对于在Unix和Linux系统上运行的MongoDB部署,数据库名称不能包含以下任何字符:
/ \。“$


数据库名称也不能包含空字符。
Length of Database Names


数据库名称不能为空,且必须少于64个字符。
Restriction on Collection Names


集合名称应以下划线或字母字符开头,不能:
包含$。
是一个空字符串(例如"")。
包含空字符。
以system.前缀开头。(保留供内部使用)
如果您的集合名称包含特殊字符(例如下划线字符)或以数字开头,那么要访问集合,请使用shell中的db.getCollection()方法 mongo或类似的驱动程序方法。


包含数据库名称,dot(.)分隔符和集合名称(ie <database>.<collection>)的集合名称 空间的最大长度为120个字节。




Restrictions on Field Names
字段名称不能包含点(即.)或空字符,并且不能以美元符号(即$)开头。查看 MongoDB如何处理SQL或查询注入?作为替代方法。


命名空间
Namespace Length
包含数据库名称,dot(.)分隔符和集合名称(ie <database>.<collection>)的集合名称 空间的最大长度为120个字节。




也可以看看
命名限制
Number of Namespaces
版本3.0更改。


对于MMAPv1,命名空间的数量仅限于命名空间文件的大小除以628。


一个16兆字节的命名空间文件可以支持大约24,000个命名空间。每个集合和索引都是一个命名空间。


该WiredTiger存储引擎是不是受到这个限制。


Size of Namespace File
版本3.0更改。


对于MMAPv1存储引擎,命名空间文件可以不大于2047兆字节。


默认名称空间文件是16兆字节。您可以使用该nsSize选项配置大小。


该WiredTiger存储引擎是不是受到这个限制。


也可以看看
命名限制
索引


Index Key Limit
索引条目的总大小必须小于 1024字节,索引条目可能包含结构性开销取决于BSON类型。


2.6版本更改: MongoDB 2.6及更高版本实施了更强的限制 :index key


如果现有文档的索引条目超过,MongoDB将不会 在集合上。以前版本的MongoDB将创建索引,但不会对这些文档进行索引。create an indexindex key limit
如果索引字段的索引条目超过了索引条目,则重新索引操作将会出错。Reindexing操作作为一部分 和命令以及方法发生。index key limitcompactrepairDatabasedb.collection.reIndex()
因为这些操作会从集合中删除所有索引,然后依次重新创建索引,否则错误将阻止这些操作重新生成集合的任何剩余索引,并且在命令的情况下,继续执行该进程的其余部分。index key limitrepairDatabase
MongoDB将不会在索引集合中插入任何具有索引字段的文档,其索引条目将超过该索引字段,而将返回错误。MongoDB的以前版本将插入但不对这些文档进行索引。index key limit
如果更新的值导致索引条目超过,则对索引字段的更新将会出错。index key limit
如果现有文档包含其索引条目超出限制的索引字段,导致该文档在磁盘上重定位的任何更新都将出错。
mongorestore并且mongoimport不会插入包含其索引条目将超过的索引字段的文档。index key limit
在MongoDB 2.6中,副本集的辅助成员将继续复制具有相应索引条目超过初始同步的索引字段的文档,但会在日志中打印警告。index key limit
辅助成员还允许对包含索引条目的索引集合的索引构建和重建操作,其索引条目超过但具有日志中的警告。index key limit
使用混合版本副本集,次要版本为2.6,主版本为2.4,辅助将复制2.4主要插入或更新的文档,但如果文档包含相应索引条目超出的索引字段,则会在日志中打印错误消息的。index key limit
对于现有的分片集合,如果该块具有包含其索引条目超出的索引字段的文档,则块迁移将失败。index key limit
Number of Indexes per Collection
单个集合可以有不超过64个指标。


Index Name Length
完全限定的索引名称(包括命名空间和点分隔符(ie ))不能超过128个字符。<database name>.<collection name>.$<index name>


默认情况下,是字段名和索引类型的并置。你可以明确地指定的 方法,以确保完全合格的索引名称不超过限制。<index name><index name>createIndex()


Number of Indexed Fields in a Compound Index
复合索引中不能超过31个字段。


Queries cannot use both text and Geospatial Indexes
您不能将$text需要特殊文本索引的查询与需要不同类型的特殊索引的查询运算符组合。例如,您不能将$text查询与$near运算符组合。


Fields with 2dsphere Indexes can only hold Geometries
具有2dsphere索引的字段必须以坐标对 或GeoJSON数据的形式保存几何数据。如果您尝试在2dsphere索引字段中插入具有非几何数据的文档,或者2dsphere在索引字段具有非几何数据的集合上构建 索引,则操作将失败。


也可以看看
分类操作限制中唯一的索引限制。
NaN values returned from Covered Queries by the WiredTiger Storage Engine are always of type double
如果从索引覆盖的查询返回的字段的值是NaN,该NaN 值的类型总是 double。


Multikey Index
Multikey索引无法覆盖查询。


Geospatial Index
一个地理空间指标不能 涵盖查询。


数据


Maximum Number of Documents in a Capped Collection
版本2.4更改。


如果使用max参数 指定上限集合的最大文档数量create,则该限制必须小于2 32个 文档。如果在创建封顶集合时未指定最大文档数量,则文档数量没有限制。


Database Size
MMAPv1存储引擎将每个数据库限制为不超过16000个数据文件。这意味着单个MMAPv1数据库的最大大小为32TB。设置storage.mmapv1.smallFiles选项将此限制降低到8TB。


Data Size
版本3.0更改。


使用MMAPv1存储引擎,单个mongod 实例无法管理超出底层操作系统提供的最大虚拟内存地址空间的数据集。


虚拟内存限制
操作系统 轴颈 没有日记
Linux的 64太字节 128兆字节
Windows Server 2012 R2和Windows 8.1 64太字节128兆字节
Windows(否则) 4太字节8兆字节
该WiredTiger存储引擎是不是受到这个限制。


Number of Collections in a Database
版本3.0更改。


对于MMAPv1存储引擎,数据库中最大数量的集合是命名空间文件大小和数据库中集合索引数的函数。


该WiredTiger存储引擎是不是受到这个限制。


查看更多信息。Number of Namespaces


副本集


Number of Members of a Replica Set
版本3.0.0更改。


副本套件最多可以有50个成员。有关与大型副本集的特定驱动程序兼容性的更多信息,请参阅 增加的副本集成员数。


Number of Voting Members of a Replica Set
副本集可以有多达7个投票成员。对于超过7个成员的副本集,请参阅非投票成员。


Maximum Size of Auto-Created Oplog
版本2.6更改。


如果您没有明确指定oplog大小(即使用 oplogSizeMB或--oplogSize),则MongoDB将创建不超过50 GB的oplog。


分片集


分片集群具有这里描述的限制和阈值。


分片操作限制


Operations Unavailable in Sharded Environments
在group不与分片工作。使用 mapReduce或aggregate替代。


自3.0版以来db.eval()不推荐使用:已弃用。


db.eval()与分片集合不兼容。您可以db.eval()在分片集群中使用未分片的集合。


$where不允许db从$where函数引用对象。这在未分片的集合中是不常见的。


该$isolated更新修正不会在分片环境中工作。


$snapshot 查询在分片环境中不起作用。


分片geoSearch环境中不支持该命令。


Covered Queries in Sharded Clusters
索引不能覆盖在查询分片的时候对一个运行集合mongos,如果指数不包含片键,除了具有以下不同的_id指标:如果在分片集合的查询只规定了一个条件_id 字段,只有返回_id字段,_id索引可以在运行时覆盖查询,mongos即使该_id 字段不是分片键。


在版本3.0中更改:在以前的版本中,索引不能覆盖 对分段收集 的查询mongos。


Sharding Existing Collection Data Size
现有的集合只有在大小不超过特定限制的情况下才能被分配。这些限制可以基于所有分片键值的平均大小和已配置的块大小来估计。


重要
这些限制仅适用于初始分片操作。成功启用分片后,碎片集可以增长到任何大小。
使用以下公式计算理论最大收集大小。


maxSplits  =  16777216  (字节) /  < 平均 尺寸 的 碎片 关键 值 中 的字节> 
maxCollectionSize  (MB ) =  maxSplits  *  (CHUNKSIZE  /  2 )
注意
最大BSON文档大小为16MB或16777216字节。


所有的转换都应该使用基数2,例如1024千字节= 1兆字节。
如果maxCollectionSize小于或几乎等于目标集合,请增加块大小以确保成功的初始分片。如果对计算结果是否与目标收集大小太接近有疑问,可能会更好地增加块大小。


成功的初始分片后,您可以根据需要减少块大小。如果稍后减小块大小,则可能需要时间才能将所有块分割成新的大小。有关修改块大小的说明,请参阅 修改分片集群中的块大小。


此表格使用上述公式说明了大致最大收集大小:


碎片关键值的平均大小 512字节256字节128字节64字节
最大分割数 32,768 65536 131,072 262,144
最大集合大小(64 MB块大小) 1 TB2 TB4 TB8 TB
最大集合大小(128 MB块大小) 2 TB4 TB8 TB16 TB
最大集合大小(256 MB块大小) 4 TB8 TB16 TB32 TB
Single Document Modification Operations in Sharded Collections
所有update()和remove()运营的分片集合必须包括片键 或将_id在查询规范场。update()并remove()没有操作 片键 或在_id外地返回一个错误。


Unique Indexes in Sharded Collections
MongoDB不支持分片上的唯一索引,除非唯一索引包含完整的分片键作为索引的前缀。在这些情况下,MongoDB将强制执行唯一性,而不是单个字段。


看到
任意 方法的独特约束。
Maximum Number of Documents Per Chunk to Migrate
如果组块中的文档数超过了250000个文档,或者将配置的块大小除以平均文档大小的1.3倍,则MongoDB不能移动块 。 db.collection.stats()包括avgObjSize表示集合中平均文档大小的字段。


碎片限制


Shard Key Size
分片键不能超过512字节。


Shard Key Index Type
分片键索引可以是分片键上的上升索引,以分片键开头并指定分片键的升序或散列索引的复合索引。


分片键索引不能是指定分片 键字段上的多键索引,文本索引或地理空间索引的索引。


Shard Key is Immutable
如果您必须更改分片键:


将MongoDB中的所有数据转储为外部格式。
丢弃原来的分片集合。
使用新的分片键配置分片。
预分割碎片键范围,以确保初始均匀分布。
将转储的数据恢复到MongoDB。
Shard Key Value in a Document is Immutable
一旦分割了一个集合,分片键和分片键值是不可变的; 即


您不能为该集合选择不同的分片键。
您不能更新分片键字段的值。
Monotonically Increasing Shard Keys Can Limit Insert Throughput
对于具有高插入量卷的簇,具有单调递增和递减键的分片键可能会影响插入吞吐量。如果您的分片键是_id字段,请注意,字段的默认值_id是ObjectIds,其值通常增加。


当与单调递增的碎片键插入文档,所有插入属于同一个块上的单个碎片。系统最终划分接收所有写入操作的块范围,并迁移其内容以更均匀地分布数据。但是,在任何时候,集群都将插入操作仅引导到单个分片,从而产生插入吞吐量瓶颈。


如果群集上的操作主要是读取操作和更新,则此限制可能不会影响群集。


要避免此约束,请使用散列分片键或选择不会单调增加或减少的字段。


版本2.4中更改:哈希碎片密钥和 散列索引存储具有升序值的键的哈希值。


操作


Sort Operations
如果MongoDB无法使用索引以请求的排序顺序获取文档,则排序操作中的所有文档的合并大小以及小的开销必须小于32 MB。


Aggregation Pipeline Operation
版本2.6更改。


管道阶段的内存限制为100兆字节。如果一个阶段超过此限制,MongoDB会产生错误。为了允许处理大型数据集,请使用该allowDiskUse选项启用聚合流水线阶段将数据写入临时文件。


版本3.4更改。


该$graphLookup阶段必须保持在100 MB的内存限制之内。如果为操作指定 ,则 舞台忽略该选项。如果有其他阶段的操作, 选择在这些其他阶段的效果。allowDiskUse: trueaggregate()$graphLookupaggregate()allowDiskUse: true


也可以看看
$ sort和内存限制和 $ group操作符和内存。
2d Geospatial queries cannot use the $or operator
看到
$or和2d索引内部。
Geospatial Queries
对于球面查询,请使用2dsphere索引结果。


2d对于球面查询使用索引可能会导致不正确的结果,例如使用2d环绕极点的球形查询的索引。


Geospatial Coordinates
有效的经度值之间-180和180,包括两个端点。
有效的纬度值之间-90和90(包括两端)。
Area of GeoJSON Polygons
对于$geoIntersects或者$geoWithin,如果指定面积大于单个半球的单环形多边形,则包含表达式; 否则,或查询互补几何。对于具有大于半球面积的所有其他GeoJSON多边形,或查询互补几何。the custom MongoDB coordinate reference system in the $geometry$geoIntersects$geoWithin$geoIntersects$geoWithin


Write Command Operation Limit Size
写命令可以接受不超过1000个操作。Bulk()在mongoshell中的操作 和可比较的方法在驱动程序中没有这个限制。


Views
除了只读以外,视图具有以下操作限制:


您无法重命名视图。
find()视图操作不支持以下投影 运算符:
$
$elemMatch
$slice
$meta
视图不支持文本搜索。
视图不支持map-reduce操作。
视图不支持geoNear操作(即 geoNear命令和$geoNear流水线阶段)



所述mongo壳提示具有4095码点用于每个线的限制。如果您输入一行超过4095个代码点,则shell将截断它。





原创粉丝点击