觉得数据库不重要人 能找到高薪工作?
数据库自带的功能不会用 都要代码循环处理
在程序员界这个普遍吗
第一种是傻子。
第二种,数据的每个字节,在计算机哪个部件里,以什么形式流动,在哪流的快,在哪流的慢,在哪聚集的多,在哪聚集的少,在哪变换形式,变换成什么形式,等等,他摸摸机箱就知道了。当你看到这行文字时,他捏着网线,听到了你高延迟高丢包的笑声。
举例说,我之前做 socket 开发,曾经有相当一个阶段,只是在转发数据,不需要跟数据库打交道,调试时候顶多看下 txt 日志。在那段工作里,数据库对我确实不重要。在这个前提下并不影响我写好 socket 通信
数据库自带的功能要不要用,看情况,很多时候会故意让业务代码去处理一些逻辑,节省数据库资源。
这俩好像不太好画等号,在目前这个社会里。
你觉得你这个厉害,那个厉害,但是只要不是厉害到呱呱响,和一般人一样,没多大影响。
讲的不是厉害,而是顶呱呱
sql 从 10 年前就开始简单化了
用 ORM 的话开发工程师就可以按自己的意愿操作数据库了吧? DBA 使用存储过程给开发提供统一接口,不仅可以更方便保障 SQL 质量,也可以做好权限分离,不是更好么?
@bleepbloop
因为存储过程是直接消耗数据库所在机器的性能,当项目足够膨大,业务性能不足可以拆解服务分布处理,而数据库的存储函数是只能堆硬件。如果涉及执行时间过久的,整个 DB 都拉跨了,但是业务上处理可以进行熔断。
那些口口声声说不做 crud 的人, 连基本的 sql 都不会写!
要想做复杂业务的 sql 是必备技能
再加一条,业务与数据库强耦合,不易变更与测试
再加上存储过程并不支持数组,map 之类的东西,写起来灵活性不高(虽说可以用临时表实现)
当然对这一小撮人,不会写 sql 确实很挫就是了。。
你用 greenplum 、clickhouse 也要写 sql 啊…当然存储过程这种就算了,复杂业务都是一堆组件。
存储过程也能拆吧,DBA 和后端配合好就行啊。至于你说的业务代码可以熔断,使用存储过程的时候业务代码为什么做不到熔断?我不明白。
阿里说的不一定就是对的吧?维护移植性不好这一点我也没看明白。
@mhycy
为什么会强耦合? DBA 提供存储过程接口给后段调用啊
stackoverflow.com/questions/6368985/mysql-stored-procedures-use-them-or-not-to-use-them
这里面讲的 pros and cons 感觉还蛮靠谱的
>于你说的业务代码可以熔断,使用存储过程的时候业务代码为什么做不到熔断?
存储过程中如果如果跑复杂逻辑处理,导致数据库主机 CPU/IO 跑满了的时候,整个 DB 基本就挂了,业务熔断和不熔断意义已经不大了。
但是如果把业务处理流程交给业务代码进行,某部分的处理流程挂起时,通过熔断的方式,还能避免其余业务同时被挂起。
加上#51 所提到的,当你需要使用数组 map 之类的,存储过程中只能通过临时表来解决,临时表的创建 /销毁等开销 无疑也是增加了数据库的负担吧?
>阿里说的不一定就是对的吧?维护移植性不好这一点我也没看明白。
其实很多东西没对错只有是否适合,阿里说的也仅仅是对于他们。对我们只有参考性。
维护不好维护这点应该好理解吧,业务代码我可以通过热重载来进行更新。也可以通过基于版本号访问来进行。我需要改动的只有业务代码这块;
如果通过存储过程,如何实现这部分?
mysql 集群场景下,存储过程好像不会自动分发吧?(这个我没把握,不清楚。
然后移植性不好这点,就更容易理解了吧?
比方去 IOE,当初如果存储过程是通过 oracle 编写的,
数据库换为 MYSQL,存储过程是否需要做兼容 /重写?
但是业务代码中,只要 SQL 代码不使用某数据库的特性来进行,数据库怎么换(常规数据库),基本业务代码部分也不需要修改。
当然了,上述提到的问题不全面,也有可能并非所有项目都会遇到这种场景,
但是该发生的还是会发生,既然存在缺点,优点又不太明显,为何不放弃这种做法呢?
————————————————-
另外我看过的一般都是.net 的 C/S 架构会使用 sqlserver 的函数进行一堆业务处理居多。
C/S 架构不是我强项我不讨论,上述提到的基本是基于 B/S 架构下的情况。
PS. 事实上我司现在有大量 00 年到 10 年的业务核心代码跑在存储过程上面,对其维护升级非常困难….
这还是#61 提到的 C/S 场景,这东西现在在实践上面已几乎找不到可用场景,所以尽可能不写一说技术上也是成立的
当年的代码里面甚至还有在数据库创建临时表充当客户端临时表单缓存的操作….
因为对接的是内存 CPU 皆不足的 PDA,但这样的操作在安卓 PDA 大为流行的现在已不合时宜
(例如网络切换会引发数据库掉线,导致数据录入出错)