数据库和 NoSQL 如何做到互补?
前面几篇文章讲了:
- 索引优化
- 主从复制
- 分库分表
这些方案本质上都在优化关系型数据库(MySQL)。
但随着业务规模继续增长,会发现一个现实:
不是所有数据都适合放在关系型数据库里。
因为 MySQL 擅长的是:
- 事务
- 关联查询
- 数据一致性
而高并发系统更关心:
- 高吞吐
- 低延迟
- 海量数据
这时就需要引入:
NoSQL(Not Only SQL)。
本章的核心思想其实就一句话:
NoSQL 不是替代 MySQL,而是和 MySQL 分工协作。
一、为什么 MySQL 无法解决所有问题
文章首先指出:
MySQL 最大优势是:
- ACID 事务
- 强一致性
- SQL 查询能力
但这些优势背后也有代价。
1. 事务成本高
例如:
订单支付:
更新订单
更新库存
更新账户余额为了保证一致性:
数据库需要:
- 加锁
- 写日志
- 回滚机制
性能必然下降。
2. 横向扩展困难
MySQL 天然是:
单机架构虽然:
- 主从
- 分库分表
可以扩展。
但复杂度越来越高。
3. 海量数据存储成本高
例如:
- 用户行为日志
- 浏览记录
- 点赞记录
- 搜索历史
每天可能新增:
亿级
十亿级数据。
这些数据:
- 查询模式简单
- 一致性要求低
继续放 MySQL 成本很高。
二、什么是 NoSQL
NoSQL 并不是一种数据库。
而是一类数据库。
核心特点:
放弃部分关系型能力,换取性能和扩展性。
常见 NoSQL:
| 类型 | 产品 |
|---|---|
| KV数据库 | Redis |
| 文档数据库 | MongoDB |
| 列存储 | HBase |
| 搜索引擎 | Elasticsearch |
三、NoSQL 为什么快
本质原因:
做减法。
MySQL 要解决:
- 事务
- JOIN
- SQL解析
- 一致性
NoSQL 往往只解决部分问题。
因此:
可以把资源全部用于:
- 存储
- 查询
- 扩展
四、Redis:解决高并发读问题
文章重点提到:
高并发系统最常见的 NoSQL:
就是 Redis。
Redis 特点:
内存存储
数据全部在内存。
访问速度:
纳秒~微秒级远快于 MySQL。
高吞吐
单机:
10万+
QPS很常见。
丰富数据结构
支持:
- String
- Hash
- Set
- ZSet
- List
因此:
Redis 主要承担:
热点数据缓存。
典型架构:
用户请求
↓
Redis
↓
MySQL这样:
绝大部分请求不会到达数据库。
五、MongoDB:解决灵活数据结构问题
关系型数据库:
需要固定表结构。
例如:
user字段必须提前设计。
但很多业务:
字段经常变化。
例如:
用户画像:
{
"name":"Tom",
"interest":["AI","Music"]
}明天可能增加:
{
"vipLevel":3
}MongoDB 的文档模型更适合:
半结构化数据。
典型场景:
- 用户画像
- 内容平台
- CMS系统
六、HBase:解决海量存储问题
当数据达到:
TB
PB级别时。
MySQL 很难支撑。
例如:
- 用户行为日志
- 埋点数据
- 推荐系统数据
特点:
超强扩展能力
增加机器即可扩容。
面向海量数据
天然支持:
百亿
千亿级数据。
但:
查询能力远弱于 MySQL。
七、Elasticsearch:解决搜索问题
MySQL 的 LIKE:
LIKE '%手机%'性能极差。
搜索场景:
例如:
- 商品搜索
- 文章搜索
- 全文检索
需要:
- 分词
- 倒排索引
- 相关性排序
这正是 ES 的强项。
典型架构:
MySQL
↓
同步
↓
ES
↓
搜索八、数据库与 NoSQL 如何配合
文章最核心部分:
MySQL 和 NoSQL 是互补关系。
典型架构:
用户请求
│
▼
业务服务
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Redis MySQL ES
缓存 核心数据 搜索数据职责分工:
MySQL
负责:
- 订单
- 支付
- 账户
核心交易数据。
强调:
一致性。
Redis
负责:
- 热点数据
- Session
- 排行榜
强调:
高性能。
ES
负责:
- 搜索
强调:
检索能力。
HBase
负责:
- 海量历史数据
强调:
存储能力。
九、为什么互联网系统普遍采用多存储架构
因为:
不存在一种数据库能同时满足所有需求。
例如:
| 需求 | 最优选择 |
|---|---|
| 事务 | MySQL |
| 缓存 | Redis |
| 搜索 | ES |
| 海量数据 | HBase |
| 灵活结构 | MongoDB |
因此:
现代架构的发展趋势是:
Polyglot Persistence(多种存储并存)。
即:
根据业务特点选择最适合的存储。
十、核心脉络
系统演进路线:
全部数据放MySQL
↓
读压力增大
↓
Redis缓存
↓
搜索需求出现
↓
Elasticsearch
↓
数据规模暴涨
↓
HBase
↓
多存储协同架构十一、本章最重要的理解
很多人学习 NoSQL 时容易产生误解:
Redis 会不会替代 MySQL?
MongoDB 会不会替代 MySQL?
文章给出的答案是:
不会。
因为:
MySQL 解决的是:
事务一致性NoSQL 解决的是:
性能
扩展性
特殊场景两者关注点完全不同。
一句话总结
NoSQL 的出现并不是为了取代关系型数据库,而是为了弥补 MySQL 在性能、扩展性和特定场景上的不足。高并发系统通常采用“MySQL + Redis + ES + HBase”等多存储协同架构,让每种存储负责自己最擅长的领域,从而同时获得一致性、高性能和高扩展能力。