关于读写分离的问题

210 天前
 Dongxiaohao

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

2286 次点击
所在节点    Java
19 条回复
mark2025
210 天前
搞个主从?
LongMaoz
210 天前
先搞个最简单的 主从 mysql 是支持主从库的 增删改走主表 查从表
seedhk
210 天前
多数据源吧,有现成的(mybatis-plus 有一款多数据源的插件)可以直接用
THESDZ
210 天前
1.应用程序+主从数据库
2.应用程序+Mycat 中间件+主从数据库
goodryb
210 天前
既然你提到代码改动最小,那当然是用中间件了
333v22
210 天前
cryboy007
210 天前
直接换用 TIDB
linxb
210 天前
mysql 简单的主从配置下,改动的代码也就几行吧
xiwolaisi
210 天前
dode
209 天前
换固态
Aresxue
209 天前
多数据源简单一点,目前来看 https://github.com/baomidou/dynamic-datasource 这个写的还不错的,不建议 ShardingSphere-JDBC 它目前的实现入侵性太强,需要比较重的分库分表的场景才更合适。
kim01
209 天前
直接套路云 MySQL 集群高级版自带读写分离。。。
JackCh3ng
209 天前
@Aresxue 你说反了吧,ShardingSphere-JDBC 实现读写分离,代码层面基本不需要修改,只要配置一下读写分离的配置就好了。多数据源我没用过,但看文档还有 @DS 这样的注解让你自己切换数据源,ShardingSphere-JDBC 可连这些都没有,在 Java 层面只有一个逻辑库。
paranoiagu
209 天前
mariadb 的 Maxscale 试试看。
sampeng
209 天前
如果是云。改机器配置。99%的项目,直接升级配置的成本远低于人的成本。。。
Aresxue
208 天前
@JackCh3ng ShardingSphere-JDBC 不兼容原有的配置格式,而且会把整个 Datasource 和 Connection 都换成自己,不需要分表的 sql 也会走它的拦截分析,很多语法都不支持,同时还需要手动指定不需要走分表的单表有哪些,动态数据源那里不用它的 starter 而是复用它的 DynamicDatasource ,自己写个配置解析 sql 然后做路由不需要业务代码变更一行而且没有任何 sql 兼容性问题
Dongxiaohao
208 天前
@Aresxue #16 昨天换成了这个,挺方便,很好使。就是不知道使用是否合规,我吧大部分的 DAO 层的 select 全部加了 DS 注解让他查询从库
JackCh3ng
208 天前
@Aresxue op 只是要读写分离,你说的分库分表 sql 语法不支持又是另外一个东西了。如果从灵活性上来说肯定动态数据源更灵活,对实际业务的干扰更可控。但 op 只是想要简单,改动代码最小,ShardingSphere-JDBC 不需要动 Java 代码,无脑把路由交给它,你什么都不用做,只要做一下配置就行了,如果不合适,配置还原,一切照旧。
Aresxue
206 天前
@Dongxiaohao 代码不多的话加个注解也是个蛮简单的方式,要是想作为一个可以面向几十个应用的功能就可以像我说的做个二方包在里面写一些路由逻辑,这个东西的好处就是对 sql 语法没有任何要求,需要注意的是潜在的事务问题(跨数据源),你使用时注意点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1045082

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX