前置条件,自己已经实现了mysql的主从复制和读写分离(atlas或者mycat),会遇到的问题
1.刚修改后的数据,立马查询是可能不一致的,因为数据同步是需要时间的,好多开发人员会忽略这一点
解决办法:
(1)开启方法事务,读写分离默认事务操作只会走主库,这里就要考虑到主库的压力问题
(2)通过代码逻辑尽量避免修改库后立马查询的操作(一般采取这种方式)
2.注意开发框架的事务配置(java 举例),一般我们会在配置文件配置某些约定的方法名字前缀开启不同的事务(或者不开启),但现在随着注解事务的流行,好多开发人员(或者架构师)搭建框架的时候在service类上加上了@Transactional注解,导致整个类都是开启事务的,这样严重影响数据库执行的效率,更重要的是开发人员不重视、或者不知道在查询类的方法上面自己加上@Transactional(propagation=Propagation.NOT_SUPPORTED)就会导致,所有的查询方法实际并没有走从库,导致主库压力过大
解决办法:根据service方法类型(写多还是读多)来家Transaction的注解,每个方法加自己单独的注解,但不建议,推荐约定不同的方法名前缀控制注解。