MongoDB学习笔记(了解 二 spring boot + java + maven + 调优)

本文深入探讨MongoDB非关系型数据库的特点与优势,详细讲解SpringBoot环境下MongoDB的搭建与使用,包括Maven包引入、配置文件设置、MongoTemplate基本操作及性能调优策略,如范式化与反范式化设计、填充因子调整和索引优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

mongoDB非关系性数据库,MongoDB是一个高性能,开源,无模式的文档型数据库,一般适用于机器运算和大数据的处理计算中。
优点
查询语言非常强大,类似于面对对象的查询语言,是非关系型数据库中最接近关系型数据库。
实用性
适合大量的或者无固定格式的数据存储。比如:日志、缓存。

spring boot 搭建环境

1、maven 包的引入
pom 中添加 spring-boot-starter-data-mongodb

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
      </dependency>

2、配置文件,MongoDB连接
application.properties 中添加配置文件
端口号 27017
数据库 test

spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test

yaml配置文件

mongodb:
  primary:
    host: 192.168.9.60
    port: 20000
    database: test

3、MongoTemplate 数据库连接
MongoTemplate 是数据库与代码连接的接口,对数据库的操作函数和方法。线程安全。

  • 增加
    MongoTemplate.save(T objectToSave)
    public void saveUser(UserEntity userEntity) {
        mongoTemplate.save(userEntity);
    }
  • 删除
    MongoTemplate.remove(T objectTodelete)
    public void deleteUserById(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query);
    }
  • 修改
    只更新一条数据
    MongoTemplate.updateFirst(Query query, Update update, Class<?> entityClass)
    更新多条数据
    MongoTemplate.updateMulti(Query query, Update update, Class<?> entityClass)
    query查询的数据
    Query(CriteriaDefinition/查询项).is(Object/查询值)
    update更新数据
    Update(key, value)
   public void updateUser(UserEntity userEntity) {
        Query query = new Query(Criteria.where("id").is(userEntity.getId()));
        Update update = new Update().set("userName", userEntity.getUserName());
        mongoTemplate.updateFirst(query, update, UserEntity.class);
    }

性能调优

范式化:是将数据分散到多个不同的集合,不同集合之间可以相互引用数据。
修改很快,查询复杂。
反范式化:将每个文档所需的数据都嵌入在文档内部。
每个文档都拥有自己的数据副本,而不是所有文档共同引用同一个数据副本。
查询很快,修改复杂
实际工作中需要根据的需要进行设计表字段。获得更高的效率。

  • 填充因子:MongoDB中为翁当的扩展而预留的增长空间。频繁插入,mongDB文档体积会变大,利于插入操作。
    1、顺序表中某个元素的大小进行增长的时候,就会导致原来分配的空间不足,只能要求其向后移动。
    2、当修改元素移动后,后续插入的文档都会提供一定的填充因子,以便于文档频繁的修改,如果没有不再有文档因增大而移动的话,后续插入的文档的填充因子会依此减小。
    3、当文档频繁扩展时,设置 userPowerOf2Sizestrue。系统会将后续插入的文档,初始空间都分配为2的N次方。
  • 索引越少越好:建立一个索引时,系统会为你添加一个索引表,用于索引指定的列,然而当你对已建立索引的列进行插入或修改时,数据库则需要对原来的索引表进行重新排序,重新排序的过程非常消耗性能。
//建立复合索引
db.test.ensureIndex({"age": 1,"no": 1,"name": 1 })

db.test.find().sort("age": 1,"no": 1)
db.test.find().sort("age": 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值