Skip to content

数据库和 NoSQL 如何做到互补?

前面几篇文章讲了:

  • 索引优化
  • 主从复制
  • 分库分表

这些方案本质上都在优化关系型数据库(MySQL)。

但随着业务规模继续增长,会发现一个现实:

不是所有数据都适合放在关系型数据库里。

因为 MySQL 擅长的是:

  • 事务
  • 关联查询
  • 数据一致性

而高并发系统更关心:

  • 高吞吐
  • 低延迟
  • 海量数据

这时就需要引入:

NoSQL(Not Only SQL)。

本章的核心思想其实就一句话:

NoSQL 不是替代 MySQL,而是和 MySQL 分工协作。

一、为什么 MySQL 无法解决所有问题

文章首先指出:

MySQL 最大优势是:

  • ACID 事务
  • 强一致性
  • SQL 查询能力

但这些优势背后也有代价。

1. 事务成本高

例如:

订单支付:

text
更新订单
更新库存
更新账户余额

为了保证一致性:

数据库需要:

  • 加锁
  • 写日志
  • 回滚机制

性能必然下降。

2. 横向扩展困难

MySQL 天然是:

text
单机架构

虽然:

  • 主从
  • 分库分表

可以扩展。

但复杂度越来越高。

3. 海量数据存储成本高

例如:

  • 用户行为日志
  • 浏览记录
  • 点赞记录
  • 搜索历史

每天可能新增:

text
亿级
十亿级

数据。

这些数据:

  • 查询模式简单
  • 一致性要求低

继续放 MySQL 成本很高。

二、什么是 NoSQL

NoSQL 并不是一种数据库。

而是一类数据库。

核心特点:

放弃部分关系型能力,换取性能和扩展性。

常见 NoSQL:

类型产品
KV数据库Redis
文档数据库MongoDB
列存储HBase
搜索引擎Elasticsearch

三、NoSQL 为什么快

本质原因:

做减法。

MySQL 要解决:

  • 事务
  • JOIN
  • SQL解析
  • 一致性

NoSQL 往往只解决部分问题。

因此:

可以把资源全部用于:

  • 存储
  • 查询
  • 扩展

四、Redis:解决高并发读问题

文章重点提到:

高并发系统最常见的 NoSQL:

就是 Redis。

Redis 特点:

内存存储

数据全部在内存。

访问速度:

text
纳秒~微秒级

远快于 MySQL。

高吞吐

单机:

text
10万+
QPS

很常见。

丰富数据结构

支持:

  • String
  • Hash
  • Set
  • ZSet
  • List

因此:

Redis 主要承担:

热点数据缓存。

典型架构:

text
用户请求

 Redis

 MySQL

这样:

绝大部分请求不会到达数据库。

五、MongoDB:解决灵活数据结构问题

关系型数据库:

需要固定表结构。

例如:

sql
user

字段必须提前设计。

但很多业务:

字段经常变化。

例如:

用户画像:

json
{
  "name":"Tom",
  "interest":["AI","Music"]
}

明天可能增加:

json
{
  "vipLevel":3
}

MongoDB 的文档模型更适合:

半结构化数据。

典型场景:

  • 用户画像
  • 内容平台
  • CMS系统

六、HBase:解决海量存储问题

当数据达到:

text
TB
PB

级别时。

MySQL 很难支撑。

例如:

  • 用户行为日志
  • 埋点数据
  • 推荐系统数据

特点:

超强扩展能力

增加机器即可扩容。

面向海量数据

天然支持:

text
百亿
千亿

级数据。

但:

查询能力远弱于 MySQL。


七、Elasticsearch:解决搜索问题

MySQL 的 LIKE:

sql
LIKE '%手机%'

性能极差。

搜索场景:

例如:

  • 商品搜索
  • 文章搜索
  • 全文检索

需要:

  • 分词
  • 倒排索引
  • 相关性排序

这正是 ES 的强项。

典型架构:

text
MySQL

同步

ES

搜索

八、数据库与 NoSQL 如何配合

文章最核心部分:

MySQL 和 NoSQL 是互补关系。

典型架构:

text
                用户请求


                 业务服务

      ┌──────────────┼──────────────┐
      ▼              ▼              ▼

   Redis          MySQL           ES
   缓存          核心数据        搜索数据

职责分工:

MySQL

负责:

  • 订单
  • 支付
  • 账户

核心交易数据。

强调:

一致性。

Redis

负责:

  • 热点数据
  • Session
  • 排行榜

强调:

高性能。

ES

负责:

  • 搜索

强调:

检索能力。

HBase

负责:

  • 海量历史数据

强调:

存储能力。

九、为什么互联网系统普遍采用多存储架构

因为:

不存在一种数据库能同时满足所有需求。

例如:

需求最优选择
事务MySQL
缓存Redis
搜索ES
海量数据HBase
灵活结构MongoDB

因此:

现代架构的发展趋势是:

Polyglot Persistence(多种存储并存)。

即:

根据业务特点选择最适合的存储。

十、核心脉络

系统演进路线:

text
全部数据放MySQL

读压力增大

Redis缓存

搜索需求出现

Elasticsearch

数据规模暴涨

HBase

多存储协同架构

十一、本章最重要的理解

很多人学习 NoSQL 时容易产生误解:

Redis 会不会替代 MySQL?

MongoDB 会不会替代 MySQL?

文章给出的答案是:

不会。

因为:

MySQL 解决的是:

text
事务一致性

NoSQL 解决的是:

text
性能
扩展性
特殊场景

两者关注点完全不同。

一句话总结

NoSQL 的出现并不是为了取代关系型数据库,而是为了弥补 MySQL 在性能、扩展性和特定场景上的不足。高并发系统通常采用“MySQL + Redis + ES + HBase”等多存储协同架构,让每种存储负责自己最擅长的领域,从而同时获得一致性、高性能和高扩展能力。

Released under the MIT License.