【数据库】Mysql和MongoDB


前言

Mysql和MongoDB的比较。


一、数据模型的本质差别

维度MySQLMongoDB
结构范式严格的表结构(行与列)无模式(Schema-less)的文档存储
数据表示扁平化二维表嵌套JSON文档(支持数组、子对象)
典型案例银行交易记录社交媒体用户画像

深层解读:
MySQL 如同 Excel 表格 —— 每行数据必须遵循预定义的列类型;而 MongoDB 更像文件夹里的自由格式文本文件,每个文档可以拥有完全不同的字段结构。这种差异使得:
MySQL 适合财务系统等需要原子性和强一致性的场景。
MongoDB 能轻松应对物联网设备上报的异构数据(如有的传感器带温度字段,有的带振动频率)。

二、性能与扩展性

1.读写模式

  • MySQL
    优势:复杂OIN查询(如跨10个表的关联分析)效率极高。
    瓶颈:单机垂直扩展有限,分库分表成本高。
  • MongoDB:
    优势:水平扩展(Sharding)近乎线性,适合每秒百万级写入(如游戏玩家行为日志)。
    特性:原生聚合管道(Aggregation Pipeline)可替代部分JOIN操作。

2.索引策略

索引类型MySQL示例MongoDB示例
基础索引B+树索引B树索引
特殊索引全文索引(FULLTEXT)地理空间索引(2dsphere)
多键索引不支持支持数字字段索引

场景化选择:
·需要多维度地理查询(如“查找5公里内的餐厅”)一MongoDB的geolear操作碾压MySQL。
需要ACID事务的库存管理系统一MySQL的BEGIN TRANISACTION 不可替代。

开发效率

敏捷开发友好性

  • MongoDB 的灵活优势
    新增字段无需ALTER TABLE停机(如电商平台突然需要记录用户 “头发颜色”)。
    嵌套文档直接映射编程语言对象(如 Python 字典 / JAVA POJO)。
  • MySQL 的严谨代价
    修改表结构可能触发全表锁,百万级数据表的 DDL 操作需谨慎。

JSON 支持深度

# MySQL8+ 的 JSON 查询(需路径表达式)
SELECT JSON_EXTRACT(user_profile, '$.hobbies[0]') FROM users;
# MongoDB 的等效查询(自然语法)
db.users.find({}, {"hobbies.0": 1});

现代技术融合趋势

  • 混合架构案例:
    用MySQL存储订单核心数据(强一致性)。
    用MongoDB存储商品评论(半结构化+高并发写入)。
  • NewSQL的崛起
    PostgreSQL通过JSONB类型+水平扩展插件(如Citus)试图兼顾两者优势,但尚未完全取代专业场景需求。

决策树

A[需要严格事务?]-->|是|B(ySQL)A-->|否|C{数据结构是否多变?}
				C-->||D(Mongo0B)
				C-->|否|E是否需要水平扩展?
				E-->是D
				E-->|否|B

MongoDB相关总结

维度内容
什么是 MongoDB一个以 JSON 为数据模型的文档数据库
为什么叫文档数据库?文档来自于 “JSON Document”,并非我们一般理解的 PDF,WORD 文档
谁开发 MongoDB?上市公司 MongoDB Inc.,总部位于美国纽约
主要用途应用数据库,类似于 Oracle, MySQL海量数据处理,数据平台
主要特点建模为可选
JSON 数据模型比较适合开发者
横向扩展可以支撑很大数据量和并发
MongoDB 是免费的吗?MongoDB 有两个发布版本:社区版和企业版。
社区版是基于 SSPL,一种和 AGPL 基本类似的开源协议
企业版是基于商业协议,需付费使用
  • 下载
    官网:https://www.mongodb.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值