数据库中分库分表,读写分离

范围路由

选取有序的列,按照一定的范围去划分
优点:可以平滑的扩充新表
缺点:数据分布不均

HASH

根据数据散列划分
优点:数据分布比较均匀
缺点:扩充比较麻烦

做分区要注意的事项

结合业务查询规则,尽量保证常用查询落到一个分区
如果出现跨区查询可能比不分区还慢

读写分离

为什么要读写分离?
数据库中如果实现写操作是要加写锁的,加了写锁后,读写都阻塞。
现实中很多场景都是读多写少,为了不影响读,可以把读的请求路由到读库。

那读库的数据是怎么同步的?
如果读库的数据也像主库一样用sql做一遍增删改操作,那岂不是也会加写锁?
所以,读库数据的同步是由 主库的binlog 写入从库的relaylog,从库解析relaylog 重现数据

读写分离有什么缺点?
数据会有延时,有些业务场景不适合,比如注册后登录

读写分离适用于读多写少的场景。
写多读少 意义不大

如何自己实现分库分表,读写分离?

在dao层封装一个AOP

  1. select 的语句走读库,其他走写库
  2. 用分区规则计算一下分片键再去找对应的数据库

你可能感兴趣的:(数据库,java,sql)