关系型数据库
读写分离
实现方式:
- 数据库服务器搭建主从集群,一主一从、一主多从
- 数据库主机负责读写操作,从机只负责读操作
- 数据库主机通过复制将数据同步到从机
- 业务服务器将写操作发给数据库主机,将读操作发给数据库从机
缺陷:
需要应对复制延迟带来的复杂性
解决方案:**
- 写操作后的读操作指定发给数据库主服务器
- 缺陷:业务关联大
- 读从机失败后再读一次主机
- 缺陷:主机压力变大
- 关键业务读写都指向主机,非关键业务读写分离
- 缺陷:业务关联大
- *是否可以两台主机,分散2.中主机的压力
分表分库
1. 分库
缺陷
- join不可用
- 事务不可用或者性能差
- 贵
2. 分表
缺陷
- 统计类操作性能降低
实现方式
- 程序封装
- 缺陷:语言相关性太强
- 中间件封装
- 缺陷:难度大,太复杂
NoSQL
解决关系型数据库痛点
- 无法存储数据结构 —— K-V存储,Redis为主 ——无法保证原子性和持久性
- schema扩展不方便 ——文档数据库,MongoDB为主 ——不支持事务,无法使用join操作
- 大数据场景下I/O较高 ——列式数据库,HBase为主 ——和行是数据库互为转换
- 全文搜索功能比较弱 ——全文搜索引擎,Elasticsearch ——本质是**反向索引**,以关键词为索引,那么正索引会有所损失
缓存
缓存穿透
数据不存在
- 可以设置默认值或空值解决
缓存生成时间长或耗费资源多
