【mongodb】mongodb和MySQL体系结构的对比

目录

          • [1. 说明](#1. 说明)
          • [2. 数据存储模型](#2. 数据存储模型)
            • [2.1 MySQL](#2.1 MySQL)
            • [2.2 MongoDB](#2.2 MongoDB)
          • [3. 扩展性](#3. 扩展性)
            • [3.1 MySQL](#3.1 MySQL)
            • [3.2 MongoDB](#3.2 MongoDB)
          • [4. 查询语言](#4. 查询语言)
            • [4.1 MySQL](#4.1 MySQL)
            • [4.2 MongoDB](#4.2 MongoDB)
          • [5. 索引和性能](#5. 索引和性能)
            • [5.1 MySQL](#5.1 MySQL)
            • [5.2 MongoDB](#5.2 MongoDB)
          • [6. 一致性模型](#6. 一致性模型)
            • [6.1 MySQL](#6.1 MySQL)
            • [6.2 MongoDB](#6.2 MongoDB)
          • [7. 架构组件](#7. 架构组件)
            • [7.1 MySQL](#7.1 MySQL)
            • [7.2 MongoDB](#7.2 MongoDB)
          • [8. 使用场景](#8. 使用场景)
            • [7.1 MySQL](#7.1 MySQL)
            • [7.2 MongoDB](#7.2 MongoDB)
          • [9. 总结对比表](#9. 总结对比表)
1. 说明
  • 1.MongoDB 和 MySQL 是两种不同类型的数据库系统,分别代表了 NoSQL 和关系型数据库(RDBMS)的典型架构。
  • 2.它们的体系结构在数据存储模型、扩展性、查询语言和一致性模型等方面存在显著差异。
2. 数据存储模型
2.1 MySQL
  • 1.关系型模型:数据存储在预定义的表中,表由行和列组成,支持复杂的关系(如外键)。
  • 2.模式固定:表结构在创建时定义,后续修改需要显式操作(如 ALTER TABLE)。
  • 3.适合结构化数据:如金融交易、订单系统等需要强一致性和复杂查询的场景。
2.2 MongoDB
  • 1.文档型模型:数据存储在灵活的 BSON 文档中,文档可以嵌套,支持数组和复杂数据结构。
  • 2.无模式(Schema-less):文档结构可以动态变化,字段可以随时添加或删除。
  • 3.适合半结构化/非结构化数据:如内容管理系统、物联网数据、日志分析等。
3. 扩展性
3.1 MySQL
  • 1.垂直扩展:通过增加硬件资源(CPU、内存、存储)提升性能。
  • 2.水平扩展:支持分片(Sharding),但需要手动配置和管理,复杂度较高。
  • 3.复制:支持主从复制(Master-Slave)和主主复制(Master-Master),用于读写分离和高可用性。
3.2 MongoDB
  • 1.水平扩展:原生支持分片(Sharding),数据自动分布到多个节点,扩展性更强。
  • 2.复制:基于副本集(Replica Set),提供自动故障转移和数据冗余。
  • 3.适合大规模数据:如实时分析、社交网络、游戏排行榜等。
4. 查询语言
4.1 MySQL
  • 1.SQL:使用结构化查询语言,支持复杂的连接(JOIN)、聚合函数和事务。
  • 2.强一致性:默认支持 ACID 事务,适合需要严格数据一致性的场景。
4.2 MongoDB
  • 1.MongoDB 查询语言(MQL):基于 JSON 的查询语法,支持嵌套查询、聚合管道(Aggregation Pipeline)和索引。
  • 2.最终一致性:副本集默认提供最终一致性,可通过读偏好(Read Preference)调整一致性级别。
  • 3.不支持 JOIN:数据通常通过嵌套文档或应用层处理关联关系。
5. 索引和性能
5.1 MySQL
  • 1.B-Tree 索引:支持多种索引类型(如主键、唯一索引、全文索引)。
  • 2.查询优化器:通过查询计划优化 SQL 查询性能。
5.2 MongoDB
  • 1.B-Tree 和文本索引:支持单字段、复合索引和地理空间索引。
  • 2.TTL 索引:自动删除过期数据。
  • 3.查询性能:通过内存映射文件(WiredTiger 存储引擎)和预取机制提升性能。
6. 一致性模型
6.1 MySQL
  • 1.强一致性:事务隔离级别(如可重复读、序列化)保证数据强一致性。
  • 2.适合金融、电商等场景。
6.2 MongoDB
  • 1.最终一致性:副本集默认提供最终一致性,适合高可用性和低延迟场景。
  • 2.可选强一致性:通过 writeConcern 和 readPreference 调整一致性级别。
7. 架构组件
7.1 MySQL
  • 1.存储引擎:支持多种存储引擎(如 InnoDB、MyISAM),InnoDB 是默认引擎,支持事务和外键。
  • 2.SQL 层:解析和优化 SQL 查询。
  • 3.插件式架构:允许扩展存储引擎和功能。
7.2 MongoDB
  • 1.存储引擎:默认使用 WiredTiger,支持压缩和快照隔离。
  • 2.查询路由层(mongos):在分片集群中负责请求路由。
  • 3.配置服务器(Config Server):存储分片元数据。
8. 使用场景
7.1 MySQL
  • 1.适合需要复杂事务、强一致性和关系型数据模型的场景。
  • 2.典型应用:银行系统、电商订单、企业资源规划(ERP)。
7.2 MongoDB
  • 1.适合需要高扩展性、灵活数据模型和快速开发的场景。
  • 2.典型应用:实时分析、内容管理、物联网、游戏。
9. 总结对比表
特性 MySQL MongoDB
数据模型 关系型(表、行、列) 文档型(BSON 文档)
扩展性 垂直扩展 + 手动分片 原生水平分片
查询语言 SQL MongoDB 查询语言(MQL)
一致性 强一致性(ACID) 最终一致性(可调)
索引 B-Tree、全文索引 B-Tree、文本、地理空间索引
适用场景 结构化数据、复杂事务 半结构化数据、高扩展性需求
10. 选择建议 - 1.如果需要强一致性、复杂事务和关系型数据模型,选择 MySQL。 - 2.如果需要高扩展性、灵活数据模型和快速开发,选择 MongoDB。
相关推荐
在未来等你4 小时前
SQL进阶之旅 Day 21:临时表与内存表应用
sql·mysql·postgresql·database·temporary-table·memory-table·sql-optimization
小Tomkk5 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
寒山李白7 小时前
MySQL复杂SQL(多表联查/子查询)详细讲解
sql·mysql·子查询·多表联查
冰橙子id8 小时前
centos7编译安装LNMP架构
mysql·nginx·架构·centos·php
玛奇玛丶8 小时前
面试官:千万级订单表新增字段怎么弄?
后端·mysql
天天摸鱼的java工程师9 小时前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql
Clang's Blog9 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
异常君10 小时前
高并发数据写入场景下 MySQL 的性能瓶颈与替代方案
java·mysql·性能优化
RestCloud10 小时前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
程序员岳焱10 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql