MongoDB管理:慎用local、admin数据库
来源:互联网 发布:中国煤炭消费量数据 编辑:程序博客网 时间:2024/06/05 02:12
MongoDB副本集默认会创建local、admin数据库,local数据库主要存储副本集的元数据,admin数据库则主要存储MongoDB的用户、角色等信息。
慎用local数据库
local数据库,从名字可以看出,它只会在本地存储数据,即local数据库里的内容不会同步到副本集里其他节点上去;目前local数据库主要存储副本集的配置信息、oplog信息,这些信息是每个Mongod进程独有的,不需要同步到副本集种其他节点。
在使用MongoDB时,重要的数据千万不要存储在local数据库中
,否则当一个节点故障时,存储在local里的数据就会丢失。
另外,对于重要的数据,除了不能存储在local数据库,还要注意MongoDB默认的WriteConcern是{w: 1}
,即数据写到Primary上(不保证journal已经写成功)就向客户端确认,这时同样存在丢数据的风险。对于重要的数据,可以设置更高级别的如{w: "majority"}
来保证数据写到大多数节点后再向客户端确认,当然这对写入的性能会造成一定的影响。
慎用admin数据库
当Mongod启用auth选项时,用户需要创建数据库帐号,访问时根据帐号信息来鉴权,而数据库帐号信息就存储在admin数据库下。
mongo-9551:PRIMARY> use adminswitched to db adminmongo-9551:PRIMARY> db.getCollectionNames()[ "system.users", "system.version" ]
- system.version存储authSchema的版本信息
- system.users存储了数据库帐号信息
- 如果用户创建了自定义的角色,还会有system.roles集合
用户可以在admin数据库下建立任意集合,存储任何数据,但强烈建议不要使用admin数据库存储应用业务数据
,最好创建新的数据库。
admin数据库里的system.users、system.roles2个集合的数据,MongoDB会cache在内存里,这样不用每次鉴权都从磁盘加载用户角色信息。目前cache的维护代码,只有在保证system.users、system.roles的写入都串行化的情况下才能正确工作,详情参考官方issue SERVER-16092
从代码中我们可以看出,MongoDB将将admin数据库上的意向写锁(MODE_IX)
直接升级为写锁(MODE_X)
,也就是说admin数据库的写入操作的锁级别只能到DB级别
,不支持多个collection并发写入,在写入时也不支持并发读取。如果用户在admin数据库里存储业务数据,则可能遭遇性能问题。
if (supportsDocLocking() || enableCollectionLocking) { if (supportsDocLocking() || enableCollectionLocking) { + + // The check for the admin db is to ensure direct writes to auth collections + // are serialized (see SERVER-16092). + if (_id == resourceIdAdminDB && !isRead) { + _mode = MODE_X; + } + _lockState->lock(_id, _mode);
- MongoDB管理:慎用local、admin数据库
- MongoDB管理:慎用local、admin数据库
- MongoDB之数据库管理
- MongoDB--数据库管理
- Mongodb 数据库管理
- MongoDB--数据库管理
- MongoDB数据库和架构管理
- MongoDB数据库的索引管理
- Django 使用admin来管理数据库中的内容
- 基于Nodejs、express框架的app升级服务。数据库MongoDB。UI框架Layui Admin。
- Finding Local Admin with the Veil-Framework
- mongodb忘记admin密码操作
- django添加admin管理
- django admin 管理模块
- django admin学习管理
- Django 站点管理(Admin)
- Dubbo-admin管理平台
- MongoDB数据库管理数据备份恢复
- Android如何调用第三方SO库
- DSP28335串口使用(查询发,中断收)
- Mysql join语法解析与性能分析
- DNS服务器搭建
- ios 高性能方法调用优化(IMP)
- MongoDB管理:慎用local、admin数据库
- Qt界面美化之qss应用
- sql自动uuid,导表exp,imp指令
- linux进程基础
- jpush 关于极光推送 部署到某些环境不能推送的问题
- adb命令:top
- NoSQL——Redis初相见
- Java常量池理解和经典总结
- QML QuickItem鼠标键盘处理