MongoDB

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>分片集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值