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限制与阈值相关推荐
- Memcached, Redis, MongoDB区别
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- MongoDB 在评论中台的实践
本文主要讲述 vivo 评论中台在数据库设计上的技术探索和实践. 一.业务背景 随着公司业务发展和用户规模的增多,很多项目都在打造自己的评论功能,而评论的业务形态基本类似.当时各项目都是各自设计实现, ...
- MongoDB 安全 checklist 及最优配置模板
云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化.并提供专业的数据库在线扩容.备份回滚.性能优化等解决方案. 了解更多 最近 M ...
- mongodb分片扩展架构
目录 一.简介 二.分片集群 三.数据分布策略 四.Mongos访问模式 五.Config元数据 六.分片均衡 参考文档 一.简介 MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『 ...
- MongoDB sharding迁移那些事(一)
如果不了解 MongoDB Sharded Cluster 原理,请先阅读 MongoDB Sharded cluster架构原理 关于MongoDB Sharding,你应该知道的 关于 shard ...
- MongoDB 4.0 事务实现解析
上个月底 MongoDB Wolrd 宣布发布 MongoDB 4.0, 支持复制集多文档事务,阿里云数据库团队 研发工程师第一时间对事务功能的时间进行了源码分析,解析事务实现机制. MongoDB ...
- MongoDB · 引擎特性 · MongoDB索引原理
MongoDB · 引擎特性 · MongoDB索引原理 数据库内核月报 原文链接 http://mysql.taobao.org/monthly/2018/09/06/ 为什么需要索引? 当你抱怨M ...
- MongoDB Sharding分片配置
Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...
- HBase、Redis、MongoDB、Couchbase、LevelDB 五款主流NoSQL数据库大比拼
在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资 ...
最新文章
- C++Builder及VC的库相互调用
- Standby Redo Log 的设定原则、创建、删除、查看、归档位置
- [转载]tomcat的配置文件server.xml不支持中文注释的解决办法
- 【Codeforces 339C】Xenia and Weights
- 查看Infinicon的HCA卡上的网络流量的方法
- 第三次scrum冲刺
- windows绕开强制更新
- 《英雄联盟》手游官宣!仍是原来配方和味道 它还能再火十年吗?
- VS Code创建C项目
- unity3D与网页的交互
- ckfinder php 漏洞,编辑器漏洞
- 串口485接法图_RS-485 2线和4线的接法
- 磁盘清理软件:BlueHarvest for Mac
- 论文翻译:A Tutorial on Thompson Sampling
- 每日一结(10.26)
- 最新阿里巴巴社招面试经历(Java工程师)
- 享元模式实例与解析实例二:共享网络设备(有外部状态)
- leetcode643. 子数组最大平均数 I
- 【愚公系列】2022年11月 uniapp专题-优购电商-个人中心页面
- 怎么修改网页边框html,DIV+CSS网页布局之边框的设置方法