数据库读写分离

原文:http://wenku.baidu.com/view/30eacbb9172ded630b1cb685.html?re=view


大致分客户端业务层做读写分离,与中间件做读写分离。

客户端做读写分离缺点是对业务代码侵入大,优点是能够根据更细粒度选择哪些方法需要从读库或主库取。

中间件做读写分离,优点自然是对业务侵入较小,但有个问题是万一主库与从库间同步存在延迟,一个事务先写然后再查(查询可能被路由到读库),这时就会发生问题。

目前像360的Atlas(不支持分布式分表),阿里b2b的Cobar( 不支持读写分离),及淘宝的Tddl(比较复杂),mysql proxy(不提供强制主库读,对实时性要求较高的查询比较适合)。


目前还没有比较成熟的数据库中间件读写分离,各个开源读写分离中间件都有各自缺点。

客户端做读写分离,可以选择Spring的动态数据源配置,基本原理就是在业务DAO加标注@Datasource,然后AOP会根据标注值选择相应的数据源。

需要注意的是,service层一个事务有两个操作,一个是读某个表数据,然后对其作处理。如果该业务要求数据实时性高,这时要指明该业务操作读操作DAO要从主库读取。





你可能感兴趣的:(数据库读写分离)