Jfinal读写分离问题

Hi, @JFinal  今天在跟着其他项目组讨论技术问题的时候,发现了一个读写分离相关的问题,可能在您看来很简单,想问您一下。

我现在的想法是写自己的BaseModel 继承model,然后重写里面的save(), update() 等等方法,方法里面其实就是简单的use(configName)  此时我有一点疑问。

    比如,我做商品管理接口开发,API接口发送过来的是商品id,如果要修改商品信息,那么我肯定需要findById(id),然后update().

我的疑问是,findBy方法肯定是读的,是从slave数据库获取的,然后update的时候是update的marster里面。 但是,如果此时还没有从主数据库同步到从数据库呢? 那find不就返回null了么?

评论区

IvyHelen

2016-08-31 11:42

补充,此时的解决方案也只能临时指定到master查询商品信息吧。

_me

2016-08-31 15:13

读写分离,尽量是纯读或纯写,像你这样的操作,只能在写的数据上操作

IvyHelen

2016-08-31 16:02

@_me 这种需求不是很经常么?? 我明白你的意思,就是查询就是查询,写入就是写入。这种大方面进行读写分离。

JFinal

2016-08-31 16:15

一般的系统都是读多写少,所以将主数据源设置为读的那些个库,然后通过覆盖 save()、update() 方法确实可以解决问题,你甚至可以定制 CommModel 继承 Model,覆盖掉 save()、update() 方法,在其中添加 use(...) 方法,然后所有的 baseModel 继承这个 CommonModel 而不直接继承 Model

JFinal

2016-08-31 16:16

至于你说的:“如果此时还没有从主数据库同步到从数据库呢? ”这个不是你担心的事情,你既然用的是主从库,就必须是实时性要求不高的场景, 天然就要容忍这个数据同步的延迟时间

JFinal

2016-08-31 16:17

最好的解决方案,其实是让应用对读写分享这件事透明,通过使用中间件,或者配置数据库让其自动实现读写分离,而你的项目完全不需要关心这件事

IvyHelen

2016-08-31 16:19

@JFinal 恩。明白。感谢回复。

l745230

2017-01-16 10:32

@JFinal 波总,能给个中间件or数据库自动实现读写分离的教程么~ 看了一下Sharding-JDBC,感觉太复杂了-,-

热门反馈

扫码入社