数据库架构优化

读写分离

1
2
3
4
5
6
7
8
9
10
11
graph LR
应用[应用]-->|读写|主地址[主地址]
应用[应用]-->|读写|读写分离[读写分离]
应用[应用]-->|读|只读1[只读1]
应用[应用]-->|读|只读2[只读2]
主地址[主地址]-->|读写|主实例[主实例]
读写分离[读写分离]-->|写|主实例[主实例]
读写分离[读写分离]-->|读|只读实例1[只读实例1]
读写分离[读写分离]-->|读|只读实例2[只读实例2]
只读1[只读1]-->|读|只读实例1[只读实例1]
只读2[只读2]-->|读|只读实例2[只读实例2]

上图为阿里云数据库的简单设计描述,针对的场景是读多写少,把读操作和写操作分开,
在一致性要求非常高的情况下,主实例也应该承担一部分读取操作

实现读写分离的方式:

  • 使用编码方式,在程序中定义两个数据源并针对不同的数据访问层使用不同的数据源
  • 使用中间件,在数据访问层和数据库中间添加一个数据库代理服务

分库分表

分表

随着数据库中的数据增多,对于单表可能出现查询瓶颈,这个时候首先要对数据库表进行分表处理

  • 垂直拆分,按照业务模块进行拆分,将原表中的所有字段进行业务划分,分开出存在不同的表、数据库、或者服务器中
  • 水平拆分,按照某种规则对单表进行水平切分,进行表分区或者建立多个表,根据规则选择访问