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

本文探讨了MongoDB数据库中不建议创建过多collections的原因,主要涉及命名空间限制和索引存储。MongoDB的数据库命名空间为16MB,用于存储collections和索引名称,同时索引也会占用这部分空间。即使不创建索引,每个collection也会有默认的_id索引。此外,文章提到了MongoDB在不同版本中关于listcollections命令锁粒度的问题,4.0版本后已进行修复。文章还总结了MongoDB的一些限制,如document大小、嵌套级别、命名空间长度等,为数据库设计和优化提供了参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6c8496a09474267605e1ff4f907fb038.png

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

根据Mongodb的官方的解释,一个数据库 database 是有命名空间的,这些命名空间是用来存储mongodb的collections 的名字的,大小16MB。

同时索引也要使用这16MB的空间,也就是索引和collection都会使用这个共享的空间。同时即使你不建立索引,一个collection 在创建的时候就必须有一个_id的索引,而给出的方案如何扩大这个存储空间也是针对mmapv1  ,此时MOGNODB的引擎基本都是wiredtiger。

但即使是这样也没有理由说明在一个mongodb的数据库中为什么不建议创建过多的collections ?为了找原因,不断的搜索中,发现了另外一个问题,MONGODB 最好升级到4.0

在一篇文字中关于MONGODB在运行中产生一些问题莫名运行中会产生卡顿,其中描述了关于MONGODB 锁的问题。

f9d047fe41109eb797c6b3b7aa521054.png

其中 list collections 的锁的粒度是 Read  共享锁,以下的三个命令都属于list collections 的范畴,执行这个命令时会引起数据库运行中的与 X锁的冲突,造成数据库运行中的卡顿。原文https://mongoing.com/archives/26201

在MONGODB 4.0 修补了这个问题

e63694d8d565b440cb3183f7ab06f9e7.png

985556de5df02480d508db7ddf66d44d.png

4.0后的MONGODB 更改了list collections 的锁的粒度

323068cdfaf3fb8495211271bffc773f.png

提出的bug

5acf189101136dfe4518401667000afa.png

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 的名字是大小写敏感的,但如果仅仅是通过大小写来产生同名的数据库是不被允许的

fdfe02f37370467974ec0d4633099c11.png

9  对于MONGODB的版本的不同MONGODB 4.4之前的版本collection的名字大小必须在120 bytes以下,如果是4.4后的版本可以提高到255bytes,名字中不能包含空格

10  在创建索引时 4.2.3 及之后的版本如果内存的大小小于200MB则在内存中直接建立索引如果超过则在_tmp 子目录下创建文件,之前的版本限制在500MB。

a221dd6381fe2a4398724341f15ae86d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值