前言
随着业务的不断发展,单机数据库已经不能满足业务需要。接下来讲讲数据库集群的几种方式:读写分离和分库分表。
读写分离
原理
读写分离的原理就是将数据库的读写操作分散在不同的节点上。
实现方式
-
多台数据库搭建一个集群,一台数据库做主库,其他数据库做从库。
-
主库负责写操作,从库负责读操作
-
主库通过复制将数据的变更同步到从库,每台节点都有完整的数据
需要考虑的问题
-
复制延迟
主库在数据变更后,不可能立即去进行同步,会有一个延迟。如果这时遇到修改完数据需要立即读出数据的场景,去从库读读是不可行的。这里有几个解决办法
- 这次写操作后的读操作指定使用主库
这种读操作就会是正确的,但是和业务很耦合
- 从库查询失败,去主库进行二次查询
这种实现较为简单,但是要考虑二次查询的频率,如果二次查询场景很多,会增加数据库压力。
3. 关键业务只走主库,其他走从库
比如用户修改了登录信息,这时需要走主库(不然会登录不上)。如果是修改了个性签名,可以进行读写分离。 -
分配机制
将读写分开,访问不同数据库,一般有两种方式:代码封装和中间件封装。- 代码封装
就是在代码中,实现数据库连接的管理,自由分配读写分离。
特点:- 实现简单
- 如果发生主从切换,就会比较麻烦,则需要修改配置并重启服务
- 中间件封装
中间件封装的意思就是独立出一个数据库管理系统,实现读写分离和数据库连接管理。业务系统像连接数据库服务器一样连接这个管理系统。
特点:- 实现较复杂
- 可以应用于很多业务系统中
- 业务系统不用关心主从切换,管理系统可以动态识别哪个库是主库(可写)
- 代码封装
总结
读写分离适合读多写少的业务场景。
在单机数据库情况下,表上家索引会优化查询,但是影响写入速度。读写分离后可以单独对读库进行优化,写库写入速度也会提高。