关系型数据库

读写分离

实现方式:

  1. 数据库服务器搭建主从集群,一主一从、一主多从
  2. 数据库主机负责读写操作,从机只负责读操作
  3. 数据库主机通过复制将数据同步到从机
  4. 业务服务器将写操作发给数据库主机,将读操作发给数据库从机

缺陷:
需要应对复制延迟带来的复杂性

解决方案:**

  1. 写操作后的读操作指定发给数据库主服务器
    1. 缺陷:业务关联大
  2. 读从机失败后再读一次主机
    1. 缺陷:主机压力变大
  3. 关键业务读写都指向主机,非关键业务读写分离
    1. 缺陷:业务关联大
  4. *是否可以两台主机,分散2.中主机的压力

_

分表分库

1. 分库

缺陷

  • join不可用
  • 事务不可用或者性能差

_

2. 分表

缺陷

  • 统计类操作性能降低

实现方式

  • 程序封装
    • 缺陷:语言相关性太强
  • 中间件封装
    • 缺陷:难度大,太复杂

NoSQL

解决关系型数据库痛点

  • 无法存储数据结构 —— K-V存储,Redis为主 ——无法保证原子性和持久性
  • schema扩展不方便 ——文档数据库,MongoDB为主 ——不支持事务,无法使用join操作
  • 大数据场景下I/O较高 ——列式数据库,HBase为主 ——和行是数据库互为转换
  • 全文搜索功能比较弱 ——全文搜索引擎,Elasticsearch ——本质是**反向索引**,以关键词为索引,那么正索引会有所损失

**

缓存

缓存穿透

数据不存在

  • 可以设置默认值或空值解决

缓存生成时间长或耗费资源多

  • 预防爬虫,及时解决

    缓存雪崩

  • 更新锁——分布式锁(ZooKeeper)
  • 后台更新

    • 定时读取
    • 消息队列通知

      缓存热点

  • 缓存复制多份