我们公司不让开发使用 join 包括 left join,不让用子查询,合理吗?

2020-06-03 16:47:10 +08:00
 hackingwu

我们公司规范不让开发使用 join 包括 left join,也不让用子查询,原因是为了减轻 DB 的压力,这样就导致我们一个多表联合查询的业务就要拆分多条语句,导致无效的请求和数据传输。我们业务是微服务架构。 我觉得是很不合理的。减轻了 DB parse 的压力,却带来了处理请求和数据传输的压力。 大家觉得呢?是我错了吗?

33843 次点击
所在节点    程序员
231 条回复
encro
2020-06-04 09:19:59 +08:00
不用 JOIN 和子查询,你用什么 SQL,KV 最适合你。

连 SQL 都不敢用,还能指望用好其他的数据库?

不是让开发人员学习掌握如何用好 SQL,而是野蛮不让用,这样的团队能成长?

楼上一堆说数据库不好扩展的,请问主从会了不?数据库里面有几亿数据了没?

搞程序的人云即云害死人。
sdwgyzyxy
2020-06-04 09:26:02 +08:00
出于微服务的考虑,join 查询的确不太允许,除非将来按业务拆分数据库,你能保证你 join 的所有表都会被分在同一个数据库中,要不还是理解下 DBA 的苦衷,我们就经历过一次服务拆分,真的很恶心,拆分完各业务独立数据库,独立升级部署都很方便.
houshengzi
2020-06-04 09:32:02 +08:00
曾经试过两张百万表不用 join,那个业务代码逻辑写多了很多

最终还是要看具体的业务逻辑吧,一句就否掉 join 是不对的
syyy
2020-06-04 09:37:20 +08:00
减轻了 DB parse 的压力,却带来了处理请求和数据传输的压力。
这个想法是怎么来的呢?
lichao
2020-06-04 09:42:29 +08:00
@syyy 处理请求可以水平扩展,DB 则不能
lichao
2020-06-04 09:42:45 +08:00
@syyy 或很难
collery
2020-06-04 09:49:16 +08:00
看来 v2 大多数都没到分库分表的阶段。
uoryon
2020-06-04 09:58:11 +08:00
提供一个额外的思路吧。(浅见,也没写过什么很大的这种在线系统
这种情况还是分场景讨论,如果只是普通的系统,记录条数比较小的情况下,那你该用用。但是当量起来了,就得从另外一个层面来考虑。

假设一直在用 join,不考虑存储,当量起来了,一些计算操作会开始膨胀,机器 cpu 会加得非常多,那怎么办,mysql 水平扩展还是垂直扩展,垂直扩展,上更好的机器,水平扩展,将 mysql 做成集群的。请求更大,集群变得更大?这两种都比较难受,垂直扩展的话,不可能有更大的机器让你不停的换,水平扩展的话,存储也水平,扩展,同时 mysql 这种是有状态的服务,运维压力更大了。

那有一个比较简单的方式,降低 mysql cpu 消耗,就是让 mysql 只做存储的事情(上面各位大佬说的当 kv ),业务计算逻辑放到后端来做,这样计算量起来,只用水平扩展后端服务就好了,挂在 lb 后面的服务随便扩容缩容。运维成本会小很多。当 mysql 还是不够的话,就开始上分库分表了。
tiedan
2020-06-04 10:03:50 +08:00
可以拍着胸脯说,出了问题我担着。看看他给不给用
neptuno
2020-06-04 10:05:30 +08:00
为了以后分表分库考虑?还是只是做决定的人看了网上的文章,一拍脑袋说的
nekoyaki
2020-06-04 10:10:43 +08:00
我觉得是这样,如果你能自己想出理由说服领导(或者哪怕是说服网友),比如用的好处和坏处都有什么,那你就可以用。
如果你自己都不知道为什么不让你用,那么不让你用就是合理的。
bnm965321
2020-06-04 10:14:22 +08:00
@love 而且网络 IO 慢得多
jsjjdzg
2020-06-04 10:39:32 +08:00
合理啊,DB 压力要降到最低的
dawniii
2020-06-04 10:42:32 +08:00
请教下楼上的大佬不用 join 怎么实现以下需求?用关系型数据库存文章,每篇文章包含多个标签(一对多),每篇文章包含多个作者(一对多),后台管理页面需要按作者和标签检索并分页。
magicnian
2020-06-04 10:42:38 +08:00
你如果经历过 db 挂了导致的事故就理解 dba 的苦衷了,按照微服务的设计思想,确实不应该多表联查,但是这是建立在非常大数据量的前提下,像我公司,业务数据都快百亿了,这时候再关联表查,db 妥妥的挂
magicnian
2020-06-04 10:43:34 +08:00
@dawniii 为什么不考虑用 nosql?如果你数据量小当我没说
dcoder
2020-06-04 10:46:10 +08:00
推荐用 join 的确实都是小白
leo8
2020-06-04 11:09:23 +08:00
@yukiloh 可以
dawniii
2020-06-04 11:09:42 +08:00
@magicnian 这种关联关系挺常见的,所以最终归宿都是 nosql ?
woshifyz
2020-06-04 11:15:39 +08:00
小白太多了,估计让小白写 join 也写不对吧。。。

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

https://ex.noerr.eu.org/t/678312

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

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

© 2021 V2EX