为什么需要读写分离?
简单来说 数据访问量大,读写都在一个库时,当执行写操作时,会把记录锁定,行在读时会被锁定。
定义一个主库 负责写操作(CUD),而其他从库负责(Read) 操作。
注意事项一:
对每次的sql语句检查下是select 还是 Insert,update,Delete操作 ,根据操作性质按照负载均衡算法选择 适合的数据库连接字符串。
注意事项二:
多个只读从库,在接收到大量读操作时,需要使用算法,把这些读负载均分到各个只读库上。
1 平均负载算法:( 把读操作平均分到每个只读库上去)
2 权重轮询调度算法:使用了权重的方法来让性能优良的机器分到更多的任务来均衡整个方案的性能,即权重轮询调度算法。
3 其他算法。
不论使用什么算法,其目的就是一个:把查询请求分散到多个只读库上去。
注意事项三:
当用户向主库写入数据时,数据保存成功后,还没分发复制到丛库时,需要有一个保障机制:即当用户在查看刚才操作的数据时,能正常访问,而不是找不到数据。
比如:1 刚保存了一条记录,可以延时2秒,然后再查询这记录(保证这条记录被分发到只读从库时再查询)。
2 保存了记录后,在N秒内先查主库,如果超过N秒,就从丛库里查询。
总之: 不论是主库还是丛库,必须保证数据有时,查询才有效。
注意事项四:
SqlServer: 数据库可以采用发布者-订阅模式 来实现主库的数据分发到只读从库。
MySQL: 据说可以使用Mysql代理
Oracle :
注意事项五:
做好读写分离开关,确保在需要时才启用读写分离。
读写分离好处: 降低了数据库访问负载压力。
坏处: 需要很多资源;主从数据库数据的一致性问题;
To be continue.