觉得数据库不重要人 能找到高薪工作?

2021-04-07 22:44:09 +08:00
 Ptu2sha
原生 SQL 不怎么会写 只会框架 ORM 操作
数据库自带的功能不会用 都要代码循环处理
在程序员界这个普遍吗
7871 次点击
所在节点    程序员
74 条回复
markgor
2021-04-08 13:39:39 +08:00
@bleepbloop
>存储过程也能拆吧,DBA 和后端配合好就行啊。
存储过程再怎么拆也是在同一台数据库主机上运行吧?
业务代码可以拆分为单个服务,在不同节点上运行。

>于你说的业务代码可以熔断,使用存储过程的时候业务代码为什么做不到熔断?
存储过程中如果如果跑复杂逻辑处理,导致数据库主机 CPU/IO 跑满了的时候,整个 DB 基本就挂了,业务熔断和不熔断意义已经不大了。
但是如果把业务处理流程交给业务代码进行,某部分的处理流程挂起时,通过熔断的方式,还能避免其余业务同时被挂起。

加上#51 所提到的,当你需要使用数组 map 之类的,存储过程中只能通过临时表来解决,临时表的创建 /销毁等开销 无疑也是增加了数据库的负担吧?

>阿里说的不一定就是对的吧?维护移植性不好这一点我也没看明白。
其实很多东西没对错只有是否适合,阿里说的也仅仅是对于他们。对我们只有参考性。
维护不好维护这点应该好理解吧,业务代码我可以通过热重载来进行更新。也可以通过基于版本号访问来进行。我需要改动的只有业务代码这块;
如果通过存储过程,如何实现这部分?
mysql 集群场景下,存储过程好像不会自动分发吧?(这个我没把握,不清楚。

然后移植性不好这点,就更容易理解了吧?
比方去 IOE,当初如果存储过程是通过 oracle 编写的,
数据库换为 MYSQL,存储过程是否需要做兼容 /重写?
但是业务代码中,只要 SQL 代码不使用某数据库的特性来进行,数据库怎么换(常规数据库),基本业务代码部分也不需要修改。


当然了,上述提到的问题不全面,也有可能并非所有项目都会遇到这种场景,
但是该发生的还是会发生,既然存在缺点,优点又不太明显,为何不放弃这种做法呢?
-------------------------------------------------
另外我看过的一般都是.net 的 C/S 架构会使用 sqlserver 的函数进行一堆业务处理居多。
C/S 架构不是我强项我不讨论,上述提到的基本是基于 B/S 架构下的情况。
EPr2hh6LADQWqRVH
2021-04-08 13:46:42 +08:00
因为数据库节点的 CPU 资源是非常宝贵的,所以使用存储过程不合适。
End of discussion.
bleepbloop
2021-04-08 13:52:18 +08:00
@markgor 你说的有道理,我觉得技术上讲应该看场景吧,,没有#34 说的“尽可能不写”之说;从管理角度看确实要少用,写存储过程的人太贵了,哈哈
supuwoerc
2021-04-08 13:57:26 +08:00
呜呜呜 正在自学 mysql 高级 觉得自己太菜竟然看到这帖~~
ychost
2021-04-08 13:59:30 +08:00
一般会点 join 子查询啥的就差不多了,性能不好的时候求助 DBA
mhycy
2021-04-08 14:15:48 +08:00
@bleepbloop
不仅仅是写的人太贵,存储过程用起来也太贵,这个太贵 @markgor 在 #61 的回复中已有详细说明
尽可能不写,体现在最重要的一句回复里面“既然存在缺点,优点又不太明显,为何不放弃这种做法呢?”
这句话能成为某种意义上的最佳实践,是因为在大多数场景之下根本没有使用的价值

PS. 事实上我司现在有大量 00 年到 10 年的业务核心代码跑在存储过程上面,对其维护升级非常困难....
这还是#61 提到的 C/S 场景,这东西现在在实践上面已几乎找不到可用场景,所以尽可能不写一说技术上也是成立的

当年的代码里面甚至还有在数据库创建临时表充当客户端临时表单缓存的操作....
因为对接的是内存 CPU 皆不足的 PDA,但这样的操作在安卓 PDA 大为流行的现在已不合时宜
(例如网络切换会引发数据库掉线,导致数据录入出错)
xhf1024
2021-04-08 14:27:39 +08:00
@cmdOptionKana 目前我们公司都是单表查询,不允许多表联查了,顶多在表中多加几个冗余字段。
Marszm
2021-04-08 14:56:44 +08:00
数据库有必要学习..但是深入并玩出花来,不可取....简单就是美听过没..SQL 如果包含太多逻辑,你今天写的,明天就看不懂这玩意是啥...根本没有可读性,无法维护..又怎么谈优化,提升性能....用 java 遍历怎么了?算法都是摆设啊?那么多算法能用来提升效率.封装函数提高可读性..非要在 SQL 里面硬搞?你到底是开发还是 DBA 啊.
kastnerorz
2021-04-08 14:56:58 +08:00
1. 数据库扩展没有加机器方便,所以尽量减少数据库压力,仅用于存储
2. 联表查询一旦涉及到分库分表不好处理
3. 大多数情况性能并不存在瓶颈,代码情况处理足以
4. batch 还是需要的,减少连接 /查询次数
crazjieb
2021-04-08 15:25:51 +08:00
我之前去面试,一上来就让我写 sql,我说 ORM 用多了,写不出来,然后就说写不出来就不能往下面了,我就走了。
wangyzj
2021-04-08 17:08:19 +08:00
都是八股文
jones2000
2021-04-08 22:21:47 +08:00
有个岗位叫 DBA, 数据库相关的如写 sql,存储过程等等都找他们。
还有一个岗位叫运维, 系统上线以后, 哪个 sql 慢了, 库压力大了,统一运维出报告,然后在提交开发修改。
whevether
2021-04-09 08:22:13 +08:00
你复杂逻辑写 sql 里面后面你就知道难以维护了。除了自己谁都接手不了
matatabi
2021-04-10 08:36:51 +08:00
有性能要求的,dba 会写给你,没有性能要求的随便弄弄,反正数据少也不会卡

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

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

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

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

© 2021 V2EX