MongoDB的安装和使用
MongoDB
(1)MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
(2)在高负载的情况下,添加更多的节点,可以保证服务器性能。
(3)MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
(4)MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB的特点可参考链接:https://www.runoob.com/docker/docker-install-mongodb.html
1. MongoDB安装
MongoDB支持Windows、Linux和Mac平台安装。我这里使用docker进行安装MongoDB
其它安装方式可参考官网
1.1 在docker上安装MongoDB
- 拉取最新的mongo镜像
docker pull mongo:latest- 创建mongo容器,默认使用27017端口映射,–auth开启登录认证
(使用服务器的需要打开27017的防火墙)
docker run -itd --name mongo -p 27017:27017 mongo --auth
进入mongo容器,并访问admin数据库。在Mongo3之后的版本没有默认的admin数据库,在访问admin数据库的时候会自动创建admin数据库。
(管理员和用户的创建需要在admin数据库进行,关于管理员和用户角色的创建可以参考下3.MongoDB用户角色)
2. MongoDB数据库操作
在admin数据库创建一个admin用户,赋予超级管理员角色
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'root', db: 'admin'}]});
db.auth('admin', '123456')进行认证,并查看用户和数据库信息
// db.updateUser({ user:'admin',pwd:'123456',roles:[ { role:'root', db: 'admin'}]})更新用户
// db.dropUser("user")删除用户
查看多个库的用户信息
创建数据库mongo_database,当创建的数据库里面没有数据的时候,显示数据库并不会将创建的数据库显示出来,使用insert语句往数据库插入数据,再查询数据库信息,新创建的数据库就显示出来了。
(MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。集合在之后会讲)
切换到mongo_database数据库,使用db.dropDatabase()将数据库删除。
注意:在创建角色的时候需要注意创建的角色在哪些数据库具有哪些角色,像有些角色在数据库只有读写权限的,执行db.dropDatabase()删除数据库会保错。像在admin数据库创建的root角色可以对数据库进行删除。
3. MongoDB用户角色
MongoDB是没有默认管理员账号,所以在安装完之后要先添加管理员账号,再开启权限认证。
use admin 切换到admin数据库(在mongo3之后就没有默认admin数据库,此步骤在没有数据库的情况下会自动创建)在admin数据库,添加的账号才是管理员账号。
用户只能在对应的数据库中创建的用户完成认证,包括管理员账号。
管理员可以管理所有数据库,但是不能在需要管理的数据库中进行认证,要先在admin数据库认证后才切换到对应的数据库进行管理。
4.MongoDB数据库角色
1. 数据库用户角色:read、readWrite
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
dbOwner:某数据库的所有者,拥有该库的所有权限,包括readWrite,dbAdmin和userAdmin权限
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
3. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
4. 超级用户角色:root
root:只在admin数据库中可用,超级管理员
5. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
6. 备份恢复角色:backup、restore;
7. 内部角色:__system
5.MongoDB和redis的比较
MongoDB和Redis都是NoSQL,采用结构型数据存储;
二者在内存映射的处理过程,持久化的处理方法不同;
MongoDB建议集群部署,更多的考虑到集群方案;
Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。
MongoD | Redis | 比较 | |
---|---|---|---|
实现语言 | c++ | c/c++ | |
协议 | BSON,自定义二进制 | 类telnet | |
性能 | 依赖内存,TPS较高 | 依赖内存,TPS非常高 | Redis优于MongoDB |
可操作性 | 丰富的数据表达,索引;最类似于关系型数据库,支持丰富的查询语句 | 数据丰富,较少的IO | MongoDB优于Redis |
内存及存储 | 适合大数据量存储,依赖系统虚拟内存,采用镜像文件存储;内存占用率比较高,官方建议独立部署在64位系统 | Redis2.0后支持虚拟内存特性(VM) 突破物理内存限制;数据可以设置时效性,类似于memcache | |
可用性 | 支持master-slave,replicatset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切片机制 | 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持auto sharding,需要依赖程序设定一致性hash机制 | MongoDB优于Redis;单点问题上,MongoDB应用简单,相对用户透明,Redis比较复杂,需要客户端主动解决.(MongoDB一般使用replicasets和sharding相结合,replicasets侧重高可用性以及高可靠,sharding侧重性能,水平扩展) |
可靠性 | 从1.8版本后,采用binlog方式(类似Mysql) 支持持久化 | 依赖快照进行持久化;AOF增强可靠性;增强性的同时,影响访问性能 | |
一致性 | 不支持事务,靠客户端保证 | 支持事务,比较脆,仅能保证事务中的操作按顺序执行 | Redis优于MongoDB |
数据分析 | 内置数据分析功能(mapreduce) | 不支持 | MongoDB优于Redis |
应用场景 | 海量数据的访问效率提升 | 较小数据量的性能和运算 | MongoDB优于Redis |
参考链接:https://www.cnblogs.com/qlqwjy/p/8652960.html
6.MongoDB的基础操作
持续更新中…