MongoDB解析 1-理论基础
前言
官网:
Start with Guides — Start with Guides (mongodb.com)
MongoDB 简介 | 菜鸟教程 (runoob.com)
MongoDB是一个开源的NoSQL数据库管理程序。
MongoDB安装
(38条消息) MongoDB安装(超详细)_AI bro的博客-CSDN博客_mongodb安装
MongoDB集群高可用
MongoDB主从复制架构原理和缺陷
master-slave架构中master节点负责数据的读写,slave没有写入权限只负责读取数据。
主从结构没有自动故障转移功能,需要指定master和slave端,不推荐在生产中使用。
mongodb4.0后不再支持主从复制!
[main] Master/slave replication is no longer supported
复制集replica sets
复制集是由一组拥有相同数据集的mongod实例做组成的集群。
复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,secondary从节点和投票节点。
复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,保证数据的安全性。
分片集群 Shard Cluster
分片(sharding)是MongoDB用来将大型集合水平分割到不同服务器(或者复制集)上所采用的方法。 不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载。
MongoDB集群高可用 | 牧马人的忧伤 (lvxueyang.vip)
MongoDB安全认证
MongoDB 默认是没有账号的,可以直接连接,无须身份验证。实际项目中肯定是要权限验证的,否则 后果不堪设想。从2016年开始 发生了多起MongoDB黑客赎金事件,大部分MongoDB安全问题 暴露出 了安全问题的短板其实是用户,首先用户对于数据库的安全不重视,其次用户在使用过程中可能没有养 成定期备份的好习惯,最后是企业可能缺乏有经验和技术的专业人员。所以对MongoDB进行安全认证 是必须要做的。
MongoDB安全认证 | 牧马人的忧伤 (lvxueyang.vip)
MongoDB应用
NoSQL 和 MongoDB
NoSQL=Not Only SQL,支持类似SQL的功能, 与Relational Database相辅相成。其性能较高, 不使用SQL意味着没有结构化的存储要求(SQL为结构化的查询语句),没有约束之后架构更加灵 活。
NoSQL数据库四大家族列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,文档存储 MongoDB
MongoDB 是一个基于分布式文件存储的数据库,由 C++ 编写,可以为 WEB 应用提供可扩展、 高性能、易部署的数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富、 最像关系数据库的。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。
MongoDB应用 | 牧马人的忧伤 (lvxueyang.vip)
Spring 访问MongoDB
Spring Data MongoDB - Reference Documentation
第1步:基于maven新建工程导入依赖的包
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.0.9.RELEASE</version> -- 注意 2.x 与 3.x 存在很大变化升级版本注意,初次使用建议使用比较靠近最新版本 </dependency>
第2步:在配置文件中配置 MongoTemplate
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <mongo:db-factory id="mongoDbFactory" client-uri="mongodb://106.75.226.220:28017/lg_resume"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg index="0" ref="mongoDbFactory"/> </bean> <context:component-scan base-package="org.example.mongodb"/> </beans>
第3步:DAO 实现类注入 MongoTemplate 完成增删改查
package org.example.mongodb.bean; import java.util.Date; /** * @author :xjlonly * @date :Created in 2021/5/13 15:20 * @description: * @modified By: * @version: $ */ public class Resume { private int id; private String name; private double salary; private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Resume{" + "id=" + id + ", name='" + name + '\'' + ", salary=" + salary + ", birthday=" + birthday + '}'; } }
package org.example.mongodb.dao.impl; import org.example.mongodb.bean.Resume; import org.example.mongodb.dao.ResumeDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Repository; /** * @author :xjlonly * @date :Created in 2021/5/13 15:23 * @description: * @modified By: * @version: $ */ @Repository(value = "resumeDao") public class ResumeDaoImpl implements ResumeDao { @Autowired private MongoTemplate mongoTemplate; @Override public void insertResume(Resume resume) { //不指定collection时 默认为对象名首字母小写 //mongoTemplate.insert(resume); //指定collection mongoTemplate.insert(resume,"lg_resume_datas"); } @Override public List<Resume> findByResume(String name) { Query query = new Query(); query.addCriteria(Criteria.where("name").is(name)); return mongoTemplate.find(query,Resume.class, "lg_resume_datas"); } @Override public List<Resume> findByNameAndSalary(String name, double salary) { Query query =new Query(); query.addCriteria(Criteria.where("name").is(name).andOperator(Criteria.where("salary").is(salary))); return mongoTemplate.find(query, Resume.class,"lg_resume_datas"); } }
第4步: 从Spring容器中获取DAO对象 进行测试 (注意:要开启组件扫描)
package org.example.mongodb; import org.example.mongodb.bean.Resume; import org.example.mongodb.dao.ResumeDao; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.format.datetime.DateFormatter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * Hello world! * */ public class App { public static void main( String[] args ) { ClassPathXmlApplicationContext pathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); final ResumeDao resumeDao = pathXmlApplicationContext.getBean("resumeDao", ResumeDao.class); Resume resume = new Resume(); resume.setName("zhangsan"); resume.setSalary(895555); //日期格式 Date date = null; SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try { date = dateFormatter.parse("2001-2-12 13:12:23"); } catch (ParseException e) { e.printStackTrace(); } resume.setBirthday(date); resumeDao.insertResume(resume); System.out.println( "Hello World!" ); } }
MongoDB应用 | 牧马人的忧伤 (lvxueyang.vip)
MongoDB架构
MongoDB 与 MySQL 中的架构相差不多,底层都使用了可插拔的存储引擎以满足用户的不同需要。用户可以根据程序的数据特征选择不同的存储引擎,在最新版本的 MongoDB 中使用了 WiredTiger 作为默 认的存储引擎,WiredTiger 提供了不同粒度的并发控制和压缩机制,能够为不同种类的应用提供了最 好的性能和存储率。
在存储引擎上层的就是 MongoDB 的数据模型和查询语言了,由于 MongoDB 对数据的存储与 RDBMS有较大的差异,所以它创建了一套不同的数据模型和查询语言。
MongoDB架构 | 牧马人的忧伤 (lvxueyang.vip)
其他参考学习:
MongoDB和Java(4):Spring Data整合MongoDB(XML配置) - 用户不存在! - 博客园 (cnblogs.com)
(38条消息) spring 5.x 系列第9篇 —— 整合mongodb (xml配置方式)_hei bai ying的博客-CSDN博客_mongo spring xml
(39条消息) Spring Data MongoDB 爆出 SpEL 表达式注入漏洞_墨菲安全的博客-CSDN博客_mongodb注入漏洞
(39条消息) Spring Data MongoDB 曝出 SpEL 表达式注入漏洞,OSCS开源社区建议开发者进行修复_开源生态安全OSCS的博客-CSDN博客
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16417842.html