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

  1. 拉取最新的mongo镜像
    docker pull mongo:latest
  2. 创建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更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

MongoDRedis比较
实现语言c++c/c++
协议BSON,自定义二进制类telnet
性能依赖内存,TPS较高依赖内存,TPS非常高Redis优于MongoDB
可操作性丰富的数据表达,索引;最类似于关系型数据库,支持丰富的查询语句数据丰富,较少的IOMongoDB优于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的基础操作

持续更新中…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值