读写分离剖析

基本介绍

读写分离是一种常见的数据库架构优化技术,通过主从(Master-Slave)的配置方式,将数据库的写操作和读操作分离到不同的数据库实例上。

主要优势

  1. 提升系统整体处理能力
  2. 提高系统可用性
  3. 优化资源利用

适用场景

  1. 数据量适中(TB级以下)
  2. 读多写少(80%读+20%写)
  3. 高并发查询

读写分离方案

具体实现方案

  1. 主从复制:主库通过binlog同步数据变更到从库
  2. 中间件方案:使用代理中间件(如MyCat、ShardingSphere)自动路由请求
  3. 应用层实现:在代码中显式区分读写数据源

扩展能力

  • 水平扩展从库:可根据查询压力动态增加从库数量
  • 负载均衡:使用轮询、加权等策略分配读请求

分表+读写分离

分表策略

当单表数据量达到500万行时,建议采用分表策略:

  • 水平分表:按照某个字段将数据分散到多张表中
  • 垂直分表:按业务字段将表拆分

实施建议

  1. 数据迁移:需要设计平滑迁移方案
  2. 监控:建立完善的监控体系
  3. 事务处理:特别注意分布式事务的处理

分库分表+读写分离

分库分表解决方案

  1. 水平分表:按ID取模、时间范围分散到多个表中
  2. 垂直分表:把不常用字段单独存放到扩展表中
  3. 分库方案:按地域或业务线拆分

注意事项

  1. 分布式事务问题:需要引入XA协议或TCC等补偿机制
  2. 跨库JOIN问题:建议在应用层处理
  3. 全局ID生成:采用雪花算法或数据库序列

主从架构与读写分离技术详解

核心功能体系

1. 多从库的读写分离配置

master-slave:
  name: ds_master_slave
  master-data-source-name: master_ds
  slave-data-source-names:
    - slave_ds_1
    - slave_ds_2
  load-balance-algorithm-type: ROUND_ROBIN

2. 原生SQL透传支持

  • 保持SQL语句原样执行
  • 零侵入性,不改变应用原有SQL语句

3. 线程级数据一致性保证

  • 在同一个线程内自动维护读写一致性
  • 写后读自动路由到主库

4. Hint强制主库路由

/* SHARDINGSPHERE_HINT: MASTER_ONLY */
SELECT account_balance FROM user_accounts WHERE user_id=12345;

不支持功能说明

  1. 数据同步机制:不包含主从数据同步协议的实现
  2. 同步延迟处理:需要业务层处理主从延迟问题
  3. 多主库限制:严格单主写入模式
  4. 跨主从事务:不支持跨库事务的隔离性保证

性能优化建议

  1. 读写分离权重配置:根据从库硬件配置设置不同的流量权重
  2. 一致性级别选择:最终一致性走从库,强一致性走主库
  3. 监控指标:主从延迟时间、各从库查询响应时间