项目变迁Java学习笔记程序员

系统变迁之五--mysql读写分离

2016-09-20  本文已影响600人  AlanKim

数据库设定了主从同步后,单纯的数据多点存放已经不能满足我了(O(∩_∩)O)...
读写分离一直有各种方案,MySQL-Proxy也好,amoeba也罢,或者其他的中间件,都是在DB和application之间引入一个proxy,使用proxy来处理application中对DB的各种操作。
还有一种伪读写分离的方案,在项目中配置多个数据源,不同的操作连接不同的数据源。。。
不过我更倾向于在驱动层去处理这个问题,不太想再去额外维护一个中间件。而mysql的驱动目前已经支持使用ReplicationDriver来替代Driver,实现读写分离。

ReplicationDriver

官方关于ReplicationDriver的说明可以参考这里:http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-master-slave-replication-connection.html

ReplicationDriver驱动分离的机制是靠判断connection.setReadOnly(true)来决定是否访问从库,而Spring的事务管理,可以使用@Tranactional(readonly=true)来设置连接是否为只读,基本上就这些,看起来挺简单吧...一路还是不断踩坑,且听俺慢慢道来。。。

先提一下,数据库连接池bonecp是不支持使用ReplicationDriver做读写分离的。最初项目为了求快和求简,用了bonecp(配制简单,块头小),不过在引入ReplicationDriver的时候,却踩了坑,无论怎么配置都是访问的主库。后面切换为druid才解决,关于淘宝开源的数据库连接池druid介绍,可以参考这里:https://github.com/alibaba/druid/wiki

在数据库连接池中配置ReplicationDriver

每个属性的说明可以参考这里:
https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

spring事务中对于连接的处理
Paste_Image.png Paste_Image.png
附上druid中的配置监控,方便查看统计
Paste_Image.png Paste_Image.png

druid跟其他数据库连接池除了在连接上面做了很多优化之外,亮点就是在监控这块了

重启后,直接访问http://ip/domainname[:port]/appname/druid ,使用上述指定的用户名及密码就可以登录了,可以查看sql及bean相关的统计,以及慢sql等统计数据。

上一篇 下一篇

猜你喜欢

热点阅读