开发者学堂课程【Spring Boot 2.5.x 开发实战:Spring Boot 2.0实战 MongoDB 数据库与面试题】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/853/detail/14070
Spring Boot 2.0实战 MongoDB 数据库与面试题
内容介绍:
一.《阿里巴巴 MongoDB4.0高级实战》
二.NoSQL 排名第一 MongoDB
三.Spring Data 实战 MongoDB 数据库
四.本节课高级面试题
MongoDB 涵盖入门到各种高级主题、索引、存储引擎及各种对接包括日志加密、安全身份验证、高可用集群,分片集群等。
一.《阿里巴巴 MongoDB4.0高级实战》
1. MongoDB数据库入门:MongoDB 概览、4.0新特性、下载安装、Shell 连接及基本操作等
2. MongoDB数据库数据查询与分析:MongoDB 查询命令、分析、聚合等
3. MongoDB数据库核心知识:MongoDB 数据库操作、集合、存储引擎、数据模型等
4. MongoDB数据库管理:MongoDB 数据相关操作、数据备份与恢复等
5. MongoDB数据库性能分析与调优:MongoDB 索引、算法、查询计划等
6. MongoDB与Java开发实战:基于 Java Spring Boot 和云数据库 MongoDB 开发 HTML5博客应用
7. MongoDB 数据库排错日志分析: MongoDB 日志收集、经典问题解析、常用问题排查工具等
8. MongoDB 数据库安全机制:MongoDB 身份验证、加密、典型机制等
9. MongoDB 数据库 HA 高可用集群架构:主从复制、读写分离、自动化故障转移、HA 集群,阿里云数据库集 群等 10. MongoDB 数据库运维:数据库维护、升级,云数据库 MongoDB 版运维、监控工具,数据库容灾方案等
11. MongoDB 优化实战案例:讲解 MongoDB 的索引原理,以及常见的优化手段,并分析一些具体的优化案例
12. MongoDB Sharding 集 群原理与架构优化:讲解 Sharding 集群原理、架构设计方法,以及常见的架构优化 手段 13. 官方网站:
https://edu.aliyun.com/workshop/3/course/1044
二、NoSQL 排名第一 MongoDB
移动互联网架构
(一)MongoDB 简介
MongoDB 是文档型数据库,较灵活,容易做集群搭建,在互联网公司运用广泛。
1. NoSQL 排名第一,BAT 互联网公司必备;
2. 分布式数据库;
3. 由C++语言编写,特点是高性能、易部署、易使用、存储数据非常方便;
4. 旨在为 Web 应用提供可扩展的高性能数据存储解决方案;
5. MongoDB 由10gen 团队所开发,于2009年2月首度推出.
6. MongoDB 开源、跨平台,
7. 支持 Windows、Linux、OS X 和 Solaris 系统
8. MongoDB 最新版本为4.0,支持跨文档事务
(二)MongoDB 优点
1. 灵活的数据模型
2. 便于横向拓展
3. 自动分片存储
4. 支持分布式查询
5. 集成内存缓存
6. 高性能高并发
(三)MongoDB 的典型行业案例
(四)MongoDB 版本特性
推荐大家用3.0以后的版本,因为3.0以后默认 Wiredtiger,性能、稳定性更强大,4.0以后基本上也支持分布式事务Transaction,包括分片集群、复制集群事务,其他并行异步复制等,提升了针对大容量数据库迁移的优化,比非关系型数据库强大,安全机制严格对标传统的关系型数据库。
(五)安装 MongoDB 数据库
下载 MongoDB4.4
官方下载,windows 可以直接下,Linux 直接用命令,安装后启动 MongoDB 服务。
可视化管理工具
• Robomongo
• Robo 3T
• Compass
MongoDB操作命令
• > show dbs
• admin 0.000GB
• config 0.000GB • local 0.000GB
• > show users
• > show collections
• > use Alibaba
• switched to db alibaba
• > db.users.insert({"name":"Java"})
• WriteResult({ "nInserted" : 1 })
• > db.users.insert({"name":"mongo","age":18})
• WriteResult({ "nInserted" : 1 })
• > db.users.find()
• { "_id" :ObjectId("604ca8c13bfab2e14d4927d4"), "name" : "Java" }
• { "_id" : ObjectId("604ca8e33bfab2e14d4927d5"), "name" : "mongo", "age" : 18 }
·
> db.users.insert({"name":"frank","password":"1234","age":18})
• WriteResult({ "nInserted" : 1 })
• > db.users.find()
• { "_id" : ObjectId("604ca8c13bfab2e14d4927d4"), "name" : "Java" }
• { "_id" : ObjectId("604ca8e33bfab2e14d4927d5"), "name" : "mongo", "age" : 18 }
• { "_id" : ObjectId("604ca9623bfab2e14d4927d6"), "name" : "frank", "password" : "1234", "age" : 18 }
使用 Win10下载,直接通过命令行启动。
三、Spring Data 实战 MongoDB 数据库
(一)Spring Data 2.5 MongoDB 新特性
1. 简化 Java 的 MongoDB 数据库开发 API
2. 提供一致的基于 Spring 的编程模型
3. Spring configuration 支持@Configuration classes or an XML namespace
4. 方便编写 Repository 仓储模式的DAO层代码
5. 自动实现 Repository interface 的 CRUD 常用操作
6. 自动进行 POJO 和 MongoDB 文档数据的映射转换, Spring’s Conversion Service
7. 可以自定义扩展方法
8. MongoTemplate helper class 提升 MongoDB 开发效率
9. Low-level mapping using MongoReader/MongoWriter abstractions
10. Java based Query, Criteria, and Update DSLs
11. Log4j log appender
12. GeoSpatial 集成
13. Map-Reduce 集成
14. JMX administration and monitoring
15. CDI support for repositories
16. GridFS 支持
Spring Data 针对多种数据语言,MongoDB 是其中一种,希望Spring Boot 能够集成它。仓储模式扩展接口,然后支持各种自定义操作,默认操作 Spring Data 已经统一生成了。映射工作对象将数据库映射,直接集成了。
MongoDB 有地理位置的索引,存储的数据类型不仅是字符串或者整数类型,现在功能比较强大,有云端版本。基本增删改查都有,特定的特殊字段查询删除和多条语句查询等需要自己开发。
(二)Repository 仓储层代码
public interface BlogRepository extends MongoRepository <Blog, objectId> {
public Blog findById(objectId id);
public void delete (objectId id);
public List<Blog> findAll();
}
Repository 仓储层代码,实际大大的简化了整个数据库编程,但是底层基础还是需要大家去使用,作为应用开发人员,使用接口越方便越简单效率越高,但是底层实现需要我们花时间去研究学习。
看一下代码,先启动MongoDB,通过命令,可以直接安装系统服务。注意参数一定是两根横线,一根横线容易出错,port 27017指定端口参数,dbpath就是数据文件位置, logpath日志文件的路径。可以直接安装启动也可以命令行方式启动。
可以加 host 指定主机名。目录新建了一个文件夹,将 MongoDB 目录放入。注意,在MongoDB4.0以后bin目录很多工具没有了。测试回车启动的是服务端,里面会生成日志文件、data文件。MongoDB 中有集合的概念,无表达的概念,对应关系型数据库中的表。另一个窗口作为客户端,不用加扩展exe,可以用show dbs查看数据库。
MongoDB 不需要提前设计数据库和表,插入数据时会自动创建数据库。切换数据库,但数据库并不存在,因为未保存数据,可以通过程序保存数据。
Spring Boot 的项中重要的有 MongoDB 对应的扩展的依赖,Spring Data 针对 MongoDB 的依赖需要加进去,其他几个通用依赖不用管。仓储层的接口定义了针对用户的表,比如客户作业自己设计一个叫 Order 的仓储接口,根据用户名、密码用户 ID 查询的策略可以自己设定。扩展是 MongoDB report 的接口。Spring 的容器需要创建仓储对象,在业务逻辑层操作,处理完业务逻辑层封装之后提供给 API 调用。
举例但不提倡直接调用数据网络层,其中定义了一个私有的成员,Spring 框架自动会创建实例注入进来,然后调用增删改查,删除所有,查询所有,这里面是根据 ID 查询某一个人,新增先做一个删除操作然后插入一条数据。
地址是 Users 下的 addUsers,配置文件端口是8081,端口是27017,数据库指定的是 alibaba,但 alibaba 目前不存在,保存数据以后就会生成。
启动 Spring Boot 项目,然后打开浏览器,搜索 localhost:8081/Users/addUsers,返回100证明插入成功。如何查看插入成功,命令行输入 show dbs 查看是否多了一个阿里巴巴数据库,存在阿里巴巴数据库但显示为0GB,再输入命令show tables 查表,再输入命令db.Users. find()查找所有数据。打开浏览器测试 localhost:8081/ Users/getAll也可以查看所有数据,完全是 Jackson 数据代码的形式返回给客户端。重点是在仓储,依赖和配置不要搞错,需要配置 MongoDB 的地址。注意这里面还未考虑 MongoDB 的链接池,分层也可以做的更细,比如业务逻辑层可以再往上传一层。注意不要引错依赖。
四、本节课高级面试题
(一)高级面试题
1. Spring Data for MongoDB映射机制
2. 官方驱动是什么
3. MongoDB 存储什么数据?NoSQL,面向文档 JSON,可以存用户数据、用户行为数据
4. MongoDB 优缺点
5. MongoDB 几大存储引擎
6. 数据复制的过程
7. 索引类型
8. 性能优化
9. 性能监控
10. GEO 索引算法
很重要的仓储模式,底层做了封装,利用仓储模式,创建数据访问对象,Spring 容器帮助完成工作。