数据访问层:分库分表与读写分离

分库分表

  • 垂直切分
    把数据库中不同的业务数据拆分到不同的数据库中。
  • 水平切分
    把同一张表中的数据拆分到两个数据库中。

  • 固定哈希
    规则简单,但是扩容时不方便,涉及大量的数据迁移。

  • 一致性哈希

读写分离

读写分离的目的是分担主库读的压力(对于数据量大并不起作用),但这里存在一个数据复制的问题。
这里有几种解决方案:
基于数据库的日志进行分库分表。
对数据做平滑迁移!

很多数据库中间件都会提供读写分离、负载均衡、安全认证、连接池等功能。这里以百度的DBproxy中读写分离为例简单介绍:
DBproxy为应用提供读写分离服务,读请求走从库,写请求走主库。
判断读写请求的方法如下:以select、show、use、explain、desc、set(不包括set auto_commit=0)等开头的,确定不会修改数据的sql,判断为读请求。
非读请求的sql均判断为写请求,包括事务。
读写分离的具体策略:

  1. 基本原则是读请求发送到从库,写请求发送到主库。
  2. 为了避免主从延迟带来的读不到刚刚更新的数据的问题,同一会话中,写请求结束后指定时间内的读请求也发到主库,此时间可配,由write_time_interval参数指定。如果此时间内没有新的写请求,则会话回到从库。
  3. 事务内的sql不进行读写分离,全部发到主库。
  4. DBProxy会缓存影响会话状态的sql命令,当同一个客户端会话对应的mysql切换时,会在切换后的mysql上回放这些缓存的sql命令,以保证客户端会话的一致性。影响会话状态的sql包括use命令和set命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值