V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dongxiaohao
V2EX  ›  Java

关于读写分离的问题

  •  
  •   Dongxiaohao · 160 天前 · 2209 次点击
    这是一个创建于 160 天前的主题,其中的信息可能已经有所发展或是发生改变。

    op 最近优化一个老项目,项目之前是单数据库( MySQL5.7 )。因为数据量太大了读写也很频繁,数据库顶不住,领导让我优化,其中一点提到将其改成读写分离的形式,第一次接触没有相关经验。想请教一下大伙,Java 里面读写分离的模式用多数据源还中间件合适?最好对代码的改动最小。如果用中间件的话有什么比较推荐的中间件吗?

    19 条回复    2024-06-02 15:12:47 +08:00
    mark2025
        1
    mark2025  
       160 天前
    搞个主从?
    LongMaoz
        2
    LongMaoz  
       160 天前
    先搞个最简单的 主从 mysql 是支持主从库的 增删改走主表 查从表
    seedhk
        3
    seedhk  
       160 天前
    多数据源吧,有现成的(mybatis-plus 有一款多数据源的插件)可以直接用
    THESDZ
        4
    THESDZ  
       160 天前
    1.应用程序+主从数据库
    2.应用程序+Mycat 中间件+主从数据库
    goodryb
        5
    goodryb  
       160 天前
    既然你提到代码改动最小,那当然是用中间件了
    cryboy007
        7
    cryboy007  
       160 天前
    直接换用 TIDB
    linxb
        8
    linxb  
       160 天前
    mysql 简单的主从配置下,改动的代码也就几行吧
    xiwolaisi
        9
    xiwolaisi  
       160 天前
    dode
        10
    dode  
       159 天前 via Android
    换固态
    Aresxue
        11
    Aresxue  
       159 天前
    多数据源简单一点,目前来看 https://github.com/baomidou/dynamic-datasource 这个写的还不错的,不建议 ShardingSphere-JDBC 它目前的实现入侵性太强,需要比较重的分库分表的场景才更合适。
    kim01
        12
    kim01  
       159 天前
    直接套路云 MySQL 集群高级版自带读写分离。。。
    JackCh3ng
        13
    JackCh3ng  
       159 天前
    @Aresxue 你说反了吧,ShardingSphere-JDBC 实现读写分离,代码层面基本不需要修改,只要配置一下读写分离的配置就好了。多数据源我没用过,但看文档还有 @DS 这样的注解让你自己切换数据源,ShardingSphere-JDBC 可连这些都没有,在 Java 层面只有一个逻辑库。
    paranoiagu
        14
    paranoiagu  
       159 天前
    mariadb 的 Maxscale 试试看。
    sampeng
        15
    sampeng  
       159 天前
    如果是云。改机器配置。99%的项目,直接升级配置的成本远低于人的成本。。。
    Aresxue
        16
    Aresxue  
       158 天前   ❤️ 1
    @JackCh3ng ShardingSphere-JDBC 不兼容原有的配置格式,而且会把整个 Datasource 和 Connection 都换成自己,不需要分表的 sql 也会走它的拦截分析,很多语法都不支持,同时还需要手动指定不需要走分表的单表有哪些,动态数据源那里不用它的 starter 而是复用它的 DynamicDatasource ,自己写个配置解析 sql 然后做路由不需要业务代码变更一行而且没有任何 sql 兼容性问题
    Dongxiaohao
        17
    Dongxiaohao  
    OP
       158 天前
    @Aresxue #16 昨天换成了这个,挺方便,很好使。就是不知道使用是否合规,我吧大部分的 DAO 层的 select 全部加了 DS 注解让他查询从库
    JackCh3ng
        18
    JackCh3ng  
       158 天前
    @Aresxue op 只是要读写分离,你说的分库分表 sql 语法不支持又是另外一个东西了。如果从灵活性上来说肯定动态数据源更灵活,对实际业务的干扰更可控。但 op 只是想要简单,改动代码最小,ShardingSphere-JDBC 不需要动 Java 代码,无脑把路由交给它,你什么都不用做,只要做一下配置就行了,如果不合适,配置还原,一切照旧。
    Aresxue
        19
    Aresxue  
       156 天前
    @Dongxiaohao 代码不多的话加个注解也是个蛮简单的方式,要是想作为一个可以面向几十个应用的功能就可以像我说的做个二方包在里面写一些路由逻辑,这个东西的好处就是对 sql 语法没有任何要求,需要注意的是潜在的事务问题(跨数据源),你使用时注意点。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2946 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.