因为…所以… — 为什么不是一种数据库解决所有问题?
类比:Excel——行列分明,有公式计算,有数据校验
1. schema不灵活:加字段要ALTER TABLE,大表锁很久
2. 全文搜索差:LIKE '%关键词%' 全表扫描,无法分词
3. 热点数据扛不住:每次都从磁盘读,10ms+
4. 大文件不合适:图片视频存BLOB,数据库暴增
用户画像:每个用户的属性不一样(张三有"爱好",李四有"职业")→ MySQL要预留100列?
类比:微信朋友圈+Excel灵活表格——每条动态内容不同,但都能存
MongoDB有text index,但分词能力弱,不支持中文分词,搜索相关性差 → 引出Elasticsearch
类比:淘宝搜索+图书馆目录卡——先查目录卡找到页码,再翻到那页
ES近实时(1秒延迟)+ 没有事务 → 所以ES不能替代MySQL,而是和MySQL配合:MySQL作为主存储,ES作为搜索索引
类比:口袋里的钱(Redis,0.1ms)vs 当天的包(本地缓存,ns)vs 家里的保险箱(MySQL,10ms)vs 银行金库(归档存储,秒级)
| 面试题 | 因为…所以… |
|---|---|
| MySQL vs MongoDB | 因为需要事务/JOIN → MySQL;因为schema灵活 → MongoDB |
| 为什么用ES | 因为MySQL LIKE搜索太慢 → ES倒排索引+分词 |
| MySQL+ES数据同步 | 因为MySQL是主存储ES是索引 → 所以需要Canal/双写同步 |
| Redis为什么快 | 因为内存比磁盘快100倍+单线程无锁竞争 |
| 大文件怎么存 | 因为BLOB让数据库暴增 → 所以存OSS,数据库只存URL |
| 为什么不是一种DB搞定 | 因为每种DB解决一类核心问题 → 没有银弹 |