根据Mongodb的官方的解释,一个数据库 database 是有命名空间的,这些命名空间是用来存储mongodb的collections 的名字的,大小16MB。
同时索引也要使用这16MB的空间,也就是索引和collection都会使用这个共享的空间。同时即使你不建立索引,一个collection 在创建的时候就必须有一个_id的索引,而给出的方案如何扩大这个存储空间也是针对mmapv1 ,此时MOGNODB的引擎基本都是wiredtiger。
但即使是这样也没有理由说明在一个mongodb的数据库中为什么不建议创建过多的collections ?为了找原因,不断的搜索中,发现了另外一个问题,MONGODB 最好升级到4.0
在一篇文字中关于MONGODB在运行中产生一些问题莫名运行中会产生卡顿,其中描述了关于MONGODB 锁的问题。
其中 list collections 的锁的粒度是 Read 共享锁,以下的三个命令都属于list collections 的范畴,执行这个命令时会引起数据库运行中的与 X锁的冲突,造成数据库运行中的卡顿。原文https://mongoing.com/archives/26201
在MONGODB 4.0 修补了这个问题
4.0后的MONGODB 更改了list collections 的锁的粒度
提出的bug
https://jira.mongodb.org/browse/SERVER-34243
另外也温习了一下mognodb本身一些限制,总结一下
1 一个collection 中的行document 的限制为16MB
2 一个document 中的嵌套的level最大不能超过100
3 命名空间namespace 限制为123字符
4 数据库的名字大小不能超过64个字符
5 一个索引的单行大小不能超过1024bytes,一个符复合索引最大支持32个key
6 一个collection 不能超过64个索引
7 MONGODB 最大支持50个节点的复制集,并且最大只能有7个投票的节点
8 数据库中MOGNODB 的名字是大小写敏感的,但如果仅仅是通过大小写来产生同名的数据库是不被允许的
9 对于MONGODB的版本的不同MONGODB 4.4之前的版本collection的名字大小必须在120 bytes以下,如果是4.4后的版本可以提高到255bytes,名字中不能包含空格
10 在创建索引时 4.2.3 及之后的版本如果内存的大小小于200MB则在内存中直接建立索引如果超过则在_tmp 子目录下创建文件,之前的版本限制在500MB。