MongoDB 规范
库命名规范
1.不能为空字符串“”
2.不能以$开头
3.不能包含 . 和 ^
4.数据库大小写敏感
5.库名最长64个字符
6.不能与系统库相同
最佳:库名包含小写英文加下划线
集合名规范
1.不能为空字符串“”
2.不能以system.系统集合名开头
3.不包含特殊符号~!@#¥%
最佳:下划线和小写英文
bson单个文档大小及嵌套
1.单个文档不超过16MB
2.嵌套不超过100层
最佳:嵌套不超过3层(高并发),单个文档过大,图片等存放GridFS
索引限制
1.单个集合最多包含64个索引
2.单个索引记录不超过1024 bytes (failIndexKeyTooLong=true)
3.多列索引个数不超过31
4.前台模式创建索引内存限制500M (maxIndexBuildMemoryUsageMegabytes)
5.不允许创建多列数组的组合索引
6.TTL索引如果是复合索引,过期将失效
7.hash索引只支持单列
最佳:使用backgroup模式批量创建索引,多列索引不超过5个字段,单个集合索引不超过5,避免对数组创建索引
副本集限制
1.副本集最多50个节点
2.副本集最多7个投票节点 (提交选举效率,减少心跳网络代价)
分布式集群限制
1.分片key最大长度不能超过512 bytes
2.分片key索引类型不能是text,数组和geo
3.分片集合单个文档的条件操作必须带分片key或_id
4.分片key及其值不允许修改
5.分片集合不允许创建普通(不含分片key前缀)唯一性索引
多文档事务限制
1.不支持系统库里的集合
2.事务不支持元数据操作的修改(如drop)
3.非增删改查如创建用户不支持事务
4.事务执行周期默认最长60s超过自动崩溃
最佳:transactionLifetimeLimitSeconds控制超时时间,不建议改大
5.默认事务申请锁等待5ms
其他限制
1.全集合扫描排序的内存限制32M (添加索引,控制排序数据量)
2.Aggregation管道操作的内存限制100M (控制计算数据量,调整allowDiskUse允许磁盘排序)
3.bulkWrite操作每批最大操作限制1k-100k(>=3.6) (每次批量控制1k-5k,bulWrite有序操作false,避免复制延迟每批适当sleep)
其他建议
1.查询,更新,删除必须带条件,条件有索引
2.update 必须带$set,否则重置文档
3.find和aggregate按需字段返回
4.数组元素添加尽量使用$push并避免对中间元素更新