已经有MySQL了,干嘛还要学MongoDB?

news2024/12/22 20:03:57

三分钟的时间,通过本文你将学会

1.MongoDB主要特征

2.MongoDB优缺点,扬长避短

3.何时选择MongoDB?为啥要用它?

4.MongoDB与MySQL关键字对比

5.下载与安装MongoDB

6.Java整合MongoDB,实现增删改查

MongoDB和MySQL的区别

数据模型不同:MySQL是关系型数据库,而MongoDB是文档型数据库。MongoDB的数据模型更加灵活,可以存储非结构化数据,适合处理大量的半结构化数据。

处理大数据量:MongoDB可以处理海量数据,而MySQL在处理大数据量时可能会出现性能瓶颈。MongoDB的分布式架构可以轻松地扩展到多个节点,以处理大量数据。

高可用性:MongoDB具有高可用性和容错性,可以在多个节点之间自动分配数据,确保数据的可靠性和可用性。

适合云计算:MongoDB是云计算时代的理想选择,可以轻松地在云端部署和管理,而MySQL则需要更多的配置和管理。

适合实时应用:MongoDB支持实时数据处理和实时查询,适合于需要快速响应的实时应用场景。

MongoDB主要特征

面向文档的数据模型:MongoDB是一种文档型数据库,数据以文档的形式存储,每个文档可以包含不同的字段和值,这种数据模型比传统的关系型数据库更加灵活。

高性能:MongoDB具有高性能的读写能力,支持高并发和快速的数据查询。

分布式架构:MongoDB支持分布式架构,可以轻松地扩展到多个节点,以处理大量数据。

高可用性:MongoDB具有高可用性和容错性,可以在多个节点之间自动分配数据,确保数据的可靠性和可用性。

索引支持:MongoDB支持多种类型的索引,包括单字段索引、复合索引、全文索引等,可以提高数据查询的效率。

强大的查询语言:MongoDB支持强大的查询语言,包括聚合管道、地理空间查询、文本搜索等,可以满足不同的查询需求。

可扩展性:MongoDB可以轻松地扩展到多个节点,以处理大量数据和高并发请求。

开源:MongoDB是一款开源的数据库,可以免费使用和修改。

MongoDB优缺点,扬长避短

MongoDB的优点:

  1. 灵活的数据模型:MongoDB的文档型数据模型非常灵活,可以存储半结构化数据,适合处理不同类型的数据。

  2. 高性能:MongoDB具有高性能的读写能力,支持高并发和快速的数据查询。

  3. 分布式架构:MongoDB支持分布式架构,可以轻松地扩展到多个节点,以处理大量数据。

  4. 高可用性:MongoDB具有高可用性和容错性,可以在多个节点之间自动分,确保数据的可靠性和可用性。

  5. 索引支持:MongoDB支持多种类型的索引,包括单字段索引、复合索引、全文索引等,可以提高数据查询的效率。

  6. 强大的查询语言:MongoDB支持强大的查询语言,包括聚合管道、地理空间查询、文本搜索等,可以满足不同的查询需求。

  7. 可扩展性:MongoDB可以轻松地扩展到多个节点,以处理大量数据和高并发请求。

  8. 开源:MongoDB是一款开源的数据库,可以免费使用和修改。

MongoDB的缺点:

  1. 不支持事务:MongoDB在早期版本中不支持事务,虽然在最新版本中已经支持了事务,但是相比传统的关系型数据库还是有所不足。

  2. 内存占用较高:MongoDB在处理大量数据时,需要占用较多的内存,如果内存不足,可能会导致性能下降。

  3. 数据库设计需要谨慎:MongoDB的灵活性也带来了一定的挑战,需要谨慎设计数据库结构,避免出现数据冗余和不一致的情况。

  4. 存储空间占用较大:MongoDB在存储数据时,需要占用较大的存储空间,如果数据量较大,可能会导致存储成本较高。

综上所述,MongoDB具有灵活的数据模型、高性能、分布式架构、高可用性、索引支持、强大的查询语言、可扩展性和开源等优点,但是不支持事务、内存占用较高、数据库设计需要谨慎、存储空间占用较大等缺点需要注意。

何时选择MongoDB?为啥要用它?

(1)游戏场景

使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。

(2)物流场景

使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。

(3)社交场景

使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。

(4)物联网场景

使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。

(5)视频直播

使用MongoDB存储用户信息、点赞互动信息。

MongoDB与MySQL关键字对比

下载与安装

以下是MongoDB的下载和安装步骤:

  1. 访问MongoDB官网(https://www.mongodb.com/),点击“Download”按钮。

  2. 在“Community Server”下选择适合自己操作系统的版本,如Windows、macOS或Linux等。

  3. 下载完成后,双击安装程序,按照提示进行安装。

  4. 安装完成后,打开命令行工具,输入“mongo”命令,如果出现“MongoDB shell version x.x.x”等信息,则表示安装成功。

  5. 如果需要在本地创建数据库,可以在命令行工具中输入“mongod”命令,启动MongoDB服务。

  6. 在浏览器中输入“http://localhost:27017/”,可以访问MongoDB的Web管理界面。

注意事项:

  1. 安装过程中需要选择安装路径和数据存储路径,建议选择默认路径。

  2. 安装完成后需要将MongoDB的bin目录添加到系统环境变量中,以便在命令行中使用MongoDB命令。

  3. 在启动MongoDB服务前,需要先创建数据存储目录,可以在命令行中输入“mkdir data\db”命令创建。

  4. 在使用MongoDB时,需要先连接到MongoDB服务,可以在命令行中输入“mongo”命令连接到本地MongoDB服务。

Java整合MongoDB,实现增删改查

整合Spring Boot和MongoDB,实现学生的增删改查的步骤如下:

  1. 创建Spring Boot项目,并添加MongoDB的依赖。

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

然后配置连接信息:

application.propertiesapplication.yml文件中添加MongoDB的连接信息,例如:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb

其中,host和port分别是MongoDB的主机名和端口号,database是要连接的数据库名称。

如果MongoDB需要进行身份验证,还需要添加以下配置:

spring.data.mongodb.username=myuser
spring.data.mongodb.password=mypassword

其中,username和password分别是MongoDB的用户名和密码。

  1. 创建学生实体类。

@Document(collection = "student")
public class Student {
    @Id
    private String id;
    private String name;
    private int age;
    // 省略getter和setter方法
}
  1. 创建学生Repository接口。

@Repository
public interface StudentRepository extends MongoRepository<Student, String> {
}
  1. 创建学生Service接口和实现类。

public interface StudentService {
    List<Student> findAll();
    Student findById(String id);
    void save(Student student);
    void deleteById(String id);
}

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentRepository studentRepository;

    @Override
    public List<Student> findAll() {
        return studentRepository.findAll();
    }

    @Override
    public Student findById(String id) {
        return studentRepository.findById(id).orElse(null);
    }

    @Override
    public void save(Student student) {
        studentRepository.save(student);
    }

    @Override
    public void deleteById(String id) {
        studentRepository.deleteById(id);
    }
}
  1. 创建学生Controller类。

@RestController
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("")
    public List<Student> findAll() {
        return studentService.findAll();
    }

    @GetMapping("/{id}")
    public Student findById(@PathVariable String id) {
        return studentService.findById(id);
    }

    @PostMapping("")
    public void save(@RequestBody Student student) {
        studentService.save(student);
    }

    @PutMapping("/{id}")
    public void update(@PathVariable String id, @RequestBody Student student) {
        student.setId(id);
        studentService.save(student);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable String id) {
        studentService.deleteById(id);
    }
}

完整代码示例:

Student.java

@Document(collection = "student")
public class Student {
    @Id
    private String id;
    private String name;
    private int age;
    // 省略getter和setter方法
}

StudentRepository.java

@Repository
public interface StudentRepository extends MongoRepository<Student, String> {
}

StudentService.java

public interface StudentService {
    List<Student> findAll();
    Student findById(String id);
    void save(Student student);
    void deleteById(String id);
}

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentRepository studentRepository;

    @Override
    public List<Student> findAll() {
        return studentRepository.findAll();
    }

    @Override
    public Student findById(String id) {
        return studentRepository.findById(id).orElse(null);
    }

    @Override
    public void save(Student student) {
        studentRepository.save(student);
    }

    @Override
    public void deleteById(String id) {
        studentRepository.deleteById(id);
    }
}

StudentController.java

@RestController
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("")
    public List<Student> findAll() {
        return studentService.findAll();
    }

    @GetMapping("/{id}")
    public Student findById(@PathVariable String id) {
        return studentService.findById(id);
    }

    @PostMapping("")
    public void save(@RequestBody Student student) {
        studentService.save(student);
    }

    @PutMapping("/{id}")
    public void update(@PathVariable String id, @RequestBody Student student) {
        student.setId(id);
        studentService.save(student);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable String id) {
        studentService.deleteById(id);
    }
}

总结

MongoDB是一种基于文档的NoSQL数据库,具有高性能、高可用性、可扩展性等优点。它使用BSON格式存储数据,支持复杂的查询和聚合操作,同时还提供了分布式锁、事务等功能。MongoDB的数据模型非常灵活,可以根据应用程序的需要进行自由设计。在Spring Boot中,可以通过引入MongoDB的依赖和配置连接信息来使用MongoDB,同时使用Spring Data MongoDB来操作MongoDB数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch-TensorBoard

一、介绍&#xff1a; TensorBoard&#xff1a;是一组用于数据可视化的工具。 SummaryWriter&#xff1a;类&#xff0c;用于提供一个高级API&#xff0c;并在给定目录中创建事件文件&#xff0c;向其中添加摘要和事件。 1. SummaryWriter(log_dir)&#xff1a;log_dir表示Tens…

MySQL 索引(w字)

目录 关于索引 关于磁盘 磁盘 ​扇区 结论 MySQL 与磁盘交互基本单位 MySQL 整体轮廓 结论 关于索引 建立测试表 关于 Page 为何IO交互要是 Page 理解单个Page 理解多个Page ​页目录 复盘一下 ​B树 ​B树 聚簇索引 VS 非聚簇索引 总结(重点) …

就业内推 | 地产行业招运维,最高30k*15薪,有住房交通补贴

01 宝能 &#x1f537;招聘岗位&#xff1a;网络运维高级工程师 &#x1f537;职责描述&#xff1a; 1、负责集团各数据中心和职场网络的设计规划、实施落地和持续优化&#xff1b; 2、负责集团网络的日常运维工作&#xff0c;如服务请求和变更的处理、网络相关故障解决&#…

JSP详解

JSP的概念&#xff1a; 概念&#xff1a;Java Serve Pages Java服务端页面 一种动态的网页技术&#xff0c;其中可以定义Html、css、js等静态内容。还可以定义Java代码的动态内容。 JSPHtmljava JSP的存在使我们可以不用在servlet里面用输出流一行一行的写字符串&#xff0…

拿下7家大厂offer后,整理出来的笔记.....

我第一次接触自动化是在2016年。那时刚毕业一年有余&#xff0c;组内一直做手工功能测试&#xff0c;大概在2018年9月&#xff0c;部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化&#xff0c;测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

Jmeter性能测试 -3数据驱动实战

什么是数据驱动&#xff1f; 从数据文件中读取测试数据&#xff0c;驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。 特点&#xff1a;测试数据与测试代码分离&#xff1b;数据控制过程 好处&#xff1a;降低开发和维护成本&#xff0c;减少代码量&#xf…

原型设计工具

常见原型图设计工具 Sketch(国内外通用) 仅支持mac系统&#xff0c;无window系统软件。 Figma(国外) Figma是一个基于浏览器的协作式UI设计工具。 即时设计(国内) 墨刀(国内) 墨刀采用简便的拖拽连线操作&#xff0c;作为一款在线原型设计软件&#xff0c;墨刀支持云端保存…

Docker 设置国内镜像源

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到网络问题&#xff0c;此时可以配置国内的镜像加速来下载。Docker 官方和国内很多云服务商都提供了国内加速器服务&#xff0c;例如如下&#xff1a; 科大镜像&#xff1a;https://docker.mirrors.ustc.edu.cn/网易&#…

SpringSecurity 硅谷通用权限系统:权限管理

由于项目需要 快速入门一下 看的是这篇 比较新比较快 硅谷通用权限系统&#xff1a;权限管理 一、权限管理 1、权限管理介绍 每个系统的权限功能都不尽相同&#xff0c;各有其自身的业务特点&#xff0c;对权限管理的设计也都各有特色。不过不管是怎样的权限设计&#xff0c;大…

Flutter 笔记 | Flutter 容器组件

Padding 这个组件最能体现Flutter与其他UI框架的一个不同点&#xff0c;那就是在其他UI框架中padding基本都是作为组件的一个属性&#xff0c;例如在html中常见的布局标签都有padding属性&#xff0c;Android中也是如此&#xff0c;但是在Flutter中组件并没有一个叫padding的属…

财务共享时代企业数智化应用能帮我们做些什么?

随着企业规模的不断扩大和业务范围的逐步扩展&#xff0c;财务工作的难度和复杂度也在不断提高&#xff0c;传统的手工录入和处理方式呈现出流程长、效率低、易出错等问题。为了提升财务工作的效率和准确性&#xff0c;越来越多的企业开始利用数智化应用打造企业内部的财务数智…

初识web自动化测试,快速成长指南!

目录 自动化 说明 优点 自动化测试 自动化测试能解决什么问题&#xff1f; 相关知识 Web自动化测试 定义 什么Web项目适合做自动化测试? Web自动化测试在什么阶段开始? 所属分类 Web自动化测试工具选择 主流的Web自动化测试工具 Selenium 概念 特点 环境搭建…

防火墙直路部署,上下行连接交换机的主备备份组网

组 网 需 求 如图所示&#xff0c;企业的两台FW的业务接口都工作在三层&#xff0c;上下行分别连接二层交换机。上行交换机连接运营商的接入点&#xff0c;运营商为企业分配的IP地址为1.1.1.1。现在希望两台FW以主备备份方式工作。正常情况下&#xff0c;流量通过FW_A转发。当F…

前端线上接口503-nginx跨域proxy_pass;proxy_set_header

nginx大怨种 前端线上接口503-nginx跨域 前端线上接口503-nginx跨域 前提&#xff1a;vue项目本地接口通过proxy都可使用&#xff0c;但是项目部署在服务器上后发现所有接口出现503如下状况 简而言之&#xff1a;页面部署在域名为https://aa.bb.cc.com/vehicle/#/下&#xff0…

Rocky Linux 9 x86_64 OVF (sysin)

Rocky Linux 9 x86_64 OVF (sysin) 以社区方式驱动的企业 Linux 请访问原文链接&#xff1a;https://sysin.org/blog/rocky-linux-9-ovf/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Rocky Linux 9.0 (5.14.0-70.13.1.el9…

财务共享领先实践,看看他们是怎么做的

随着信息技术的快速发展&#xff0c;由于创新商业模式的出现&#xff0c;金融结构、操作策略和流程正在发生变化。大数据、云计算、人工智能、机器人流程自动化&#xff08;RPA&#xff09;等新兴技术正在应用于金融及财务领域&#xff0c;以优化财务管理流程并提高运营效率。财…

公司来了个测试开发,听说是00后,上来一顿操作给我看呆了...

5年测试&#xff0c;应该是能达到资深测试的水准&#xff0c;即不仅能熟练地开发业务&#xff0c;而且还能熟悉项目开发&#xff0c;测试&#xff0c;调试和发布的流程&#xff0c;而且还应该能全面掌握数据库等方面的技能&#xff0c;如果技能再高些的话&#xff0c;甚至熟悉分…

若依框架在未登录的情况下访问swagger3.0页面,出现弹窗的解决方法

若依框架在未登录的情况下访问swagger3.0页面&#xff0c;出现弹窗的解决方法 效果展示&#xff1a; 解决方法&#xff1a;在ShiorConfig.java类中找到shiroFilterFactoryBean方法&#xff0c;然后在filterChainDefinitionMap里面put你要过滤的地址&#xff0c;如下&#xff…

高通开发系列 - 音频驱动中的APR通道不能打开问题

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题概述问题现象问题分析问题解决问题概述 对msm8909平台进行内核升级,相应的其音频驱动也需要进行升级,使用了同平台的音频驱动作…

CDN 带宽与上传下载速率关系?

带宽&#xff08;Bandwidth&#xff09;单位用 bps(bit/s)&#xff0c;表示每秒钟传输的二进制位数。 下载速率单位用 Bps(Byte/s) 表示&#xff0c;表示每秒钟传输的字节数。 1Byte&#xff08;字节&#xff09; 8bit&#xff08;位&#xff09;&#xff0c;即下载速率 带宽…