一再询问及涉及查询讲解

 

A,B两只说明数据规模十几万,数据规模还无怪,单机MySQL够用了,在单机的基本功及只要提到两阐明的数目,先说一个最为气象,A,B两单说明还未曾索引,并且关系是笛卡尔积,那关联结果碰头爆炸式增长,可能到亿级别,这个时候网络IO成了瓶颈,这个时刻少软十万推行结果集的拉扯去或许多低于1次亿级别之结果集的拉取,那么以干合并拉至service层做重新快。但其实业务遭一般不见面生诸如此类笨的行事,一般涉及会有连接条件,并且连续条件上会出目录,一般是生一个结果集于粗,拿到者结果集去其它一样摆设表去干有其它信息,如果坐service层去做,最抢之道是,先查A表,得到一个不怎么之结果集,一糟rpc,再依据结果集,拼凑出B表的查询条件,去B表查到一个结实集,再同不行rpc,再管结果集拉回service层,再同不善rpc,然后service层做联合,3蹩脚rpc,如果就此数据库的join,关联结果拉回,一次等rpc,帮您省了少次于rpc,当然数据库及召开涉嫌更快,对承诺到数据库就是平次blk
nested loop join,这是事情常用情况。
然而真正大多数作业还见面设想把这种联合操作放到service层,我觉得有几乎者考虑:
首先:单机数据库计算资源异常贵,数据库同时要服务写及朗诵,都急需吃CPU,为了能够给数据库的吞吐变得再胜,而事情又无视那几百玄妙到毫秒级的延时差距,业务会将还多算放到service层做,毕竟计算资源异常好水平扩展,数据库很为难啊,所以大部分工作会管纯算操作放到service层做,而将数据库当成平种植带事务能力的kv系统来使,这是均等种植重业务,轻DB的架构思路
其次:很多苛的事体或会见由于发展的史由来,一般不见面只所以同一栽数据库,一般会于多独数据库及加以同叠中件,多单数据库中还能做毛的join,自然业务会抽象出一个service层,降低对数据库的耦合。
其三:对于有特大型商厦由于数量规模巨大,不得不对数据库进行分库分表,这个题材自己以《阿里缘何而禁用三表以上的join》上啊回复了,对于分库分表的行使,使用join也备受了广大限量,除非业务会充分好之基于sharding
key明确要join的有限个说明在跟一个物理库中。而中等件一般对跨库join都支持不好。举一个要命普遍的业务例子,在分库分表中,要同创新两独说明,这有限个表位于不同的物理库中,为了保证数据一致性,一种做法是通过分布式事务中件拿片个更新操作放到一个事情中,但这么的操作一般如果加全局锁,性能大捉急,而有点事情会耐受短暂之数未雷同,怎么开?让其各自更新呗,但是会存在数量形容黄的题目,那就是打个定时任务,扫描下A表有没有产生挫折的实施,然后看看B表是未是吧从不写成功,然后对当下简单漫漫提到记录做订正,这个时同没法用join去落实,只能将数据拉到service层应用自己来统一了。。。

 

 

作者:聿明leslie
链接:https://www.zhihu.com/question/68258877/answer/264097272

发表评论

电子邮件地址不会被公开。 必填项已用*标注