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

2022-02-09 09:19:03 浏览数 (1)

一个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。

0 人点赞