先贴地址:Java 日经问题总结
欢迎补充,蟹蟹
1
wysnylc OP 目前收录:
Mybatis 二级缓存->业务缓存的解决方案 为什么不推荐使用 join |
2
glacer 2018-11-01 15:47:11 +08:00
又是一个不推荐使用 join 的
除了在分布式分库分表的情况下,我想不出还有别的会使得 join 性能地下的场景 真以为自己在程序中 merge 数据能快过 db ? |
3
wysnylc OP @glacer #2 来来来,您提供一个跨库事务的解决方案,如何保证同时提交?回滚怎么处理?回滚异常怎么处理?你能接受数据库不一致的错误数据?
|
5
glacer 2018-11-01 16:06:07 +08:00
@wysnylc 就算是分库分表的情况也不需要完全禁掉 join 的使用,一个良好的中间件是可以根据 sharding key 分析 SQL 判断数据的分布,如果查询的表中的数据都在一个分库中,那么这条 join 的 SQL 是完全可以直接下推到分库执行的。
|
6
wysnylc OP @glacer #4 这里讨论的情况就是分布式,跨库的场景 join 带来的问题所以你说的跟我说的有什么关系?
其次你说的良好的中间件能够提供下名称吗?据我所知目前能够实现强事务的中间件根本没有,都只有弱事务比如 mycat 支持多租户方案。 支持分布式事务(弱 xa )。 支持 XA 分布式事务( 1.6.5 )。 注意到第二条了吗? |
7
hexinxucxy 2018-11-01 16:27:40 +08:00
@wysnylc DRDS 可以完美支持 join
|
8
wysnylc OP @hexinxucxy #7 DRDS 是否支持分布式 JOIN ? 它是如何支持复杂 SQL?
支持大部分的 JOIN 的语义,但对于比较复杂的情况,DRDS 做了一些限制。例如大表之间的 JOIN,由于执行代价过高,速度过慢容易导致性能或者系统不可用等情况,因此请尽量避免。 以上为官方文档回答,纯粹用性能堆叠出的"join",我认为弊大于利 |
9
wysnylc OP |
10
wysnylc OP @glacer #5 贴一个知乎对 join 的相关讨论 https://www.zhihu.com/question/38038257
单机情况随便你玩,分布式跨库使用 join 带来的问题远远大于解决的问题,与其找实现 join 的方案不如考虑业务上拆分 个人认为最终解决跨库事务的方案是量子纠缠 |
11
pexcn 2018-11-01 16:43:29 +08:00
csdn 差评
|
12
glacer 2018-11-01 16:45:31 +08:00
@wysnylc 我并没有在你贴出的文章中看到明显表明有分布式、分库分表的字样,那么这样的文章就很有可能会误导别人。
至于你说支持强一致事务的中间件,那就是楼上说的 DRDS,链接: https://helpcdn.aliyun.com/document_detail/71230.html 而且我们之前讨论的是跨库 Join 的问题,为什么和分布式事务扯上关系呢?真是奇怪。 |