1.简介
MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库
是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库
2.数据特征
数据存储量较大,甚至是海量
对数据读写的响应速度要求较高
某些数据安全性要求不高,可以接受一定范围内的误差
3.MongoDB与Redis和Mysql的对比
(1)与Redis的对比
Redis纯内存数据库,内存不足触发淘汰策略
结构化存储格式(Bson),方便扩展
(2)与MySQL的对比
MongoDB不支持事务和多表操作
MongoDB支持动态字段管理
(3)查询效率对比
Redis > MongoDB > MySQL
4.体系结构
5.MongoDB入门
#查看所有数据库
show dbs
#通过use关键字切换数据库
use testdb
#删除数据库
db.dropDatabase()
6.springBoot整合MongoDB
/** * 注入MongoTemplate对象来完成对于数据的CRUD操作 */ @Autowired private MongoTemplate template; /** * 保存 */ @Test public void testSave() { Person person = new Person(); // 自动添加id不需要进行设置 person.setName("李四"); person.setAge(18); person.setAddress("深理工"); template.save(person); } @Test public void testFindAll() { List<Person> persons = template.findAll(Person.class); for (Person p : persons) { System.out.println(p.toString()); } } /** * 条件查循 */ @Test public void testFind() { // 需要两个对象,一个query 一个实体类 // 1.创建Criteria对象,并设置查询条件 // where中的字段为表中的字段名,而不是实体类中属性名称 Criteria criteria = Criteria.where("myname").is("李四");//is相当于sql语句中的 = // 2.根据Criteria对象,创建Query对象 Query query = Query.query(criteria); // 3.查询 List<Person> people = template.find(query, Person.class); for (Person p : people) { System.out.println(p.toString()); } } /** * 分页查询 */ @Test public void testFindPage() { int page = 1; int size = 2; // 需要两个对象,一个query 一个实体类 // 1.创建Criteria对象,并设置查询条件 // where中的字段为表中的字段名,而不是实体类中属性名称 Criteria criteria = Criteria.where("age").lt(50);//is相当于sql语句中的 = // 2.根据Criteria对象,创建Query对象,并且设置分页参数 Query query = Query.query(criteria) .skip((page - 1) * size) //从第几条开始查 .limit(size)//每页查询条数 .with(Sort.by(Sort.Order.desc("age"))); //设置排序 // 3.查询 List<Person> people = template.find(query, Person.class); for (Person p : people) { System.out.println(p.toString()); } } /** * 更新 */ @Test public void testUpdate() { //1.创建Query对象 Query query = new Query(Criteria.where("id").is("6496d3017cc0f53097540440")); //2.设置需要更新的数据内容 Update update = new Update().set("age", 10).set("myname", "王五"); //3.调用方法 template.updateFirst(query, update, Person.class); } /** * 删除 */ @Test public void testRemove() { //1.创建Query对象 Query query = new Query(Criteria.where("id").is("6496d3017cc0f53097540440")); //2.调用方法 template.remove(query, Person.class); } }
7.MongoDB集群
(1)单点问题分析
单机Mongodb并不适用于企业场景,存在两个问题亟需解决
<1>单点故障
单一MongoDB提供服务,在服务器宕机时造成整体应用崩溃
<2>海量数据存储
单一MongoDB,并不能支持海量数据存储
(2)集群概述
为了解决单点故障和海量数据存储问题,MongoDB提供了三种集群形式来支持
Master-Slaver(主从集群): 是一种主从副本的模式,目前已经不推荐使用
Replica Set (副本集群):模式取代了 Master-Slaver 模式,是一种互为主从的关系。可以解决单点故障问题
Sharding (分片集群):可以解决单点故障和海量数据存储问题
<1>副本集群
<2>分片集群