Mongodb 版本好升级到4.0以上为什么与mongodb 数据库使用的限制

一个MONGODB的使用者,可能会听到一个说法,就是不要在一个MONGODB的数据库中存放太多的collections  ,翻译成RDBMS的语言,就是你不要在一个数据库中产生太多的表。


根据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。



相关文章