chengdedeng / perseus

:zap:database read and write separation of java
https://github.com/chengdedeng/perseus
120 stars 44 forks source link

是否考虑:如果事务是 ReadOnly 时,由从库读取 #2

Closed Acvrock closed 7 years ago

Acvrock commented 7 years ago

因为编程习惯的原因,大部分 Service 上都使用 @Transactional(readOnly = true) 修饰, 如果使用 perseus 的话,都会从主库读取, 我看其他一些代码有判断 [如果事务是 ReadOnly 时,由从库读取] 这个操作,DynamicDataSourceTransactionManage 所以我的问题是:是否考虑添加: [如果事务是 ReadOnly 时,由从库读取] 这个操作 这么做有什么风险?

chengdedeng commented 7 years ago

readyOnly在mybatis中其实是没有任何用处的,因为这个设计最早是想作用在connection上,但是mybatis有session的概念,你调试下代码就知道了。如果你添加了readonly,perseus并不会去从库读取。 如果一个readonly的transaction中有一个写然后再有一个读,这个时候如果走从库,是否能够插入进去?当然你可以将Mysql的从库设置成readonly,从而报错。但是我认为readonly并不能保证有些程序员在transaction中进行写操作,我个人觉得这对数据一致性的威胁很大。当然有人说,我能保证里面全是读,那我认为这个是没有必要起事务的。

Acvrock commented 7 years ago

收到,谢谢😄