NoSQL简介
NoSQL意思是没有sql语句的数据库,指的是非关系型的数据库.
NoSQL的优点:
- 对数据库读写频率较高的数据
- 对海量数据的存储
- 对数据库的高扩展性和高可用性
NoSQL的缺点:
- 数据库事务一致性需求
- 数据库我的读写实时性需求
- 对于业务需求,有时需要多表查询
MongoDB简介
MongoDB是由c++编写,一个基于分布式文件存储的数据库,主要作用是为Web应用提供可扩展的高性能数据存储解决方案,在高负载的情况下,添加更多的节点,可以保证服务器的性能
MongoDB对数据的存储格式为一个文档,数据结构由键值对组成.文档类似于JSON对象.字段值可以包含其他文档,数组及文档数组
{
name:"刘思元",
age:"20",
family:["寸","思","思"]
}
MongoDB与Redis区别
(1)内存管理机制上
- Redis的数据全部写入内存,当内存不够时,使用最近最少使用算法(LRU)进行淘汰
- MongoDB的数据存储是在硬盘上,只不过需要经常的去的数据会被加载到内存中,所谓的内存数据映射
(2)支持的数据类型
- Redis支持的数据类型只有五种String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)
- MongoDB支持的数据类型类似于JSON,但不是完全的JSON,JSON只有六种类型(null,bool,int,String,Array,对象),但是MongoDB在此基础上还增加了几种比如日期类型…
(3)事务处理
- MongoDB不支持事务处理,考客户端自身保证,
- Redis支持事务,比较弱,仅能保证事务中的操作顺序
(4)性能
- 在物理内存足够的前提下:Redis>MongoDB
MongoDB的安装
前提是在VM上安装CentOS7,并且配置好网络环境,安装Docker容器
1.拉取镜像
docker pull mongo:latest
2.创建和启动容器
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
3.进入容器
docker exec -it mymongo/bin/bash
4.使用MongoDB客户端进行操作
mongo
MongoDB的使用
启动docker systemctl restart docker.service
进入容器 docker exec -it mymongo /bin/bash
进入mongo控制台 mongo
查看数据库 show dbs
创建一个数据库 use MyFirstDB
(如果存在就使用这个数据库,不存在就创建)
创建一个集合db.createCollection("MyFirstDB")
常用操作
insert
插入数据 语句格式:db.集合名.save(数据)
db.User.save({name:'zhangsan',age:21,sex:true})
查看数据 db.User.find()
_id字段说明:Objectld是、id”的默认类型。Objectld使用12字节的存储空间,每个字节二位十六进制数字, 是一个24位的字符串
Query
条件查询
- 在user表中查询姓名为***的人
db.User.find({"name":"刘思元"})
- 在user表中查询***的年龄
db.User.find({"name":"css"},{"age":1})
- 排序
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
db.User.find().sort({age:1})
- 获取指定数量的数据
在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据
db.User.find().skip(0).limit(3)
Update
SQL句式:update Userset age = 100, sex = 0 where name = 'user1'
db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})
Remove
移除对应id的行:db.User.remove(id)
移除所有:db.User.remove({})