• 请不要在回答技术问题时复制粘贴 AI 生成的内容
v2overflow
V2EX  ›  程序员

存储过程真的很难么?

  •  2
     
  •   v2overflow · Jun 30, 2019 · 17271 views
    This topic created in 2691 days ago, the information mentioned may be changed or developed.

    新领导要求不要用存储过程,说因为存储过程太复杂,后续的人不好接手... 要求所有数据的处理都读出来用 java 程序处理,比如复制一张表:先 select 到对象中,再把这个对象 insert 到目标表...和他说 CTAS,他说太复杂,和他说效率,他说可以加机器...

    如果说过于依赖存储过程会对后续数据库迁移有影响我觉得是有道理的,但他貌似根本没想到这一层,而且既然用数据库了,不能用 SQL 实在不能理解

    126 replies  •  2019-07-03 09:36:13 +08:00
    1  2  
    ❮ ❯
    ebingtel
    ebingtel
    Jun 30, 2019❤️21
    1
    我也觉得你领导是对的……好的程序大把,好的 DBA 凤毛麟角……自己觉得顺手,后面给谁维护呢?
    cloudbeyond
    cloudbeyond
    Jun 30, 2019❤️5
    2
    领导是对的,程序易改,数据库难改,程序好扩展,数据库不好扩展。用廉价资源保护重要资源
    lihongjie0209
    lihongjie0209
    Jun 30, 2019❤️4
    3
    数据库不带任何业务逻辑是正确的做法
    sunny352787
    sunny352787
    Jun 30, 2019❤️3
    4
    再加一条,存储过程没法进行版本控制
    Takamine
    Takamine
    Jun 30, 2019 via Android❤️1
    5
    领导是对的。
    当远古业务用存储过程发生死锁的时候,你可知多刺激。
    annielong
    annielong
    Jun 30, 2019
    6
    是不是前后端分离,有专业的 dba 吧,有些需求还是存储过程好用,我手头经常定制新增定制报表,就前台做一个通用类,数据一个报表一个过程,新增修改直接在数据库改,也不用发布新版本
    niubee1
    niubee1
    Jun 30, 2019
    7
    存储过程是用小机装 Oracle 时代的做法了,实际上等于是把业务逻辑和数据存储耦合在一起了
    aborigine
    aborigine
    Jun 30, 2019
    8
    存储过程很简单,但是维护很麻烦很难,要是改需求就更恶心了
    webdisk
    webdisk
    Jun 30, 2019 via Android
    9
    @niubee1 一直好奇写字台大小的小型机里面长什么样子
    v2overflow
    v2overflow
    OP
    Jun 30, 2019 via iPhone
    10
    @cloudbeyond 问题是 SQL 都不用的话,还用数据库做什么…我们是做批量维护的功能,大部分应用场景就是根据某些条件去更新某字段,以及备份,加载这些,复制表用 java 一条一条的 select 再 insert 这种我真是从来没想到过
    pagxir
    pagxir
    Jun 30, 2019 via Android
    11
    这不是难不难的问题,而是该不该的问题。
    PerFectTime
    PerFectTime
    Jun 30, 2019
    12
    然鹅我司就是遇到了 5#所说的远古业务死锁的问题....

    简直一座屎山...
    v2overflow
    v2overflow
    OP
    Jun 30, 2019 via iPhone
    13
    @pagxir 其实我觉得不用存储过程我可以接受,我也说了可移植性不好,但领导那边连标准 SQL 都要求避免使用……
    pagxir
    pagxir
    Jun 30, 2019 via Android
    14
    @v2overflow 这要取决于你们的业务,还是该不该的问题。
    metrxqin
    metrxqin
    Jun 30, 2019❤️18
    15
    傻子才用存储过程,知道为什么吗?

    可维护性 0
    可测试性 0
    可重用性 0
    可扩展性 0
    可移植性 0
    dobelee
    dobelee
    Jun 30, 2019 via Android
    16
    1. 存储过程不难
    2. 你领导是对的
    oaix
    oaix
    Jun 30, 2019
    17
    就楼主说的这个需求不是可以用 insert into select 语句吗,这也不让用吗?
    INSERT INTO table2 SELECT * FROM table1;
    akira
    akira
    Jun 30, 2019
    18
    交次学费就知道为什么不用存过了

    导数据那个不用 ctas,应该是有别的原因 问具体呗
    v2overflow
    v2overflow
    OP
    Jun 30, 2019 via iPhone
    19
    @pagxir 我认可根据业务功能去做技术选型,之前也一直是这么做

    但新来的领导要求所有问题都统一,比如不用存储过程就连 SQL 也都不用,不管应用场景,字段求和就是记录扫出来 java 里面加,update 就是符合条件扫出来,java 改字段再 update 进去,这种真的是好设计么?还是我思想过时了?

    另外,移植性,灵活性是理由,我认可
    难度,可维护性我不觉得有什么问题
    wd
    wd
    Jun 30, 2019 via iPhone
    20
    进了垃圾公司,后续都是招聘垃圾程序员,自然没有几个能接存储过程的。解决办法就是进个牛逼公司,进不去就听你领导的。
    yidinghe
    yidinghe
    PRO
    Jun 30, 2019 via Android
    21
    这个也太绝对了,我这边就是直接 insert...select 一条语句搞定,复杂吗。但如果是存储过程确实能不用就不用,我们新系统数据迁移,虽然 dba 给了迁移的存储过程,但我们决定还是用代码来做,为什么,因为迁移完了还要有很多校验,dba 要做这个的话就必须学习每张表的业务逻辑。这种事 dba 是不干的。
    jingyulong
    jingyulong
    Jun 30, 2019
    22
    有 DBA 的时候,就可以用存储过程了。有些特别复杂的业务,使用 SQL 效率会很高,看实际业务了。
    loading
    loading
    Jun 30, 2019
    23
    存储过程写的时候不难,读?基本不可能!
    wc951
    wc951
    Jun 30, 2019 via Android
    24
    还有一点就是关系型数据库单打天下的时代过去了
    nidaye999
    nidaye999
    Jun 30, 2019
    25
    看来楼主还在坚持自己的想法。做事要考虑周全,不要只想自己。参考其他人的意见是不错的选择。
    fox0001
    fox0001
    Jun 30, 2019 via Android
    26
    一般不能用存储过程的都不用。缺点正如 @metrxqin #15 所言。

    对于原有的存储过程,目前的维护是:
    1 )用程序重新实现
    2 )不能重新实现的,全部导出 SQL 文本,做版本控制,并且加上注释。(基本没有这种情况了)

    剩下视图也是导出 SQL 文本做版本控制。
    applehater
    applehater
    Jun 30, 2019
    27
    不好调试,没执行记录,容易留 BUG 还不好确定,不能咬定是别人的问题。我现在就遇到这样的问题。
    zander1024
    zander1024
    Jun 30, 2019
    28
    有好的 dba 的时候可以用存储,但是不保证好的 dba 一直在你公司啊... 真的,程序找问题比存储找快多了。
    zclHIT
    zclHIT
    Jun 30, 2019
    29
    歪个楼:
    要么。。。
    要么。。。
    要么。。。
    对吧?
    ty89
    ty89
    Jun 30, 2019❤️7
    30
    当你只有一把锤子的时候,你看所有东西都像钉子
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Jun 30, 2019 via iPhone
    31
    可别用这玩意,老糟心了
    zr8657
    zr8657
    Jun 30, 2019
    32
    我觉得 30 楼说的入木三分
    springz
    springz
    Jun 30, 2019
    33
    特定行业吧,如果是做 ERP 或者特定行业,存储过程好用。
    springz
    springz
    Jun 30, 2019
    34
    并不是每个产品都会面临频繁变化的需求的
    springz
    springz
    Jun 30, 2019❤️1
    35
    当数据越来越大,面临分库分表的时候,就知道什么存储过程,视图,触发器等等这些上古时代的垃圾会变成屎让你一点点吃下去。存储过程是最大最硬的屎。
    springz
    springz
    Jun 30, 2019
    36
    @v2overflow V2EX 上很少传统企业程序员,大家都是被数据库坑过的人,思路可能不同。为了最大的扩展性,大多数情况下别说存储过程了,关联查询建议最好不要使用的。
    springz
    springz
    Jun 30, 2019
    37
    建议看下 阿里巴巴开发手册 数据库部分
    NeinChn
    NeinChn
    Jun 30, 2019
    38
    还有类似的关联问题:
    “为什么外键这么好用领导不让用”
    “为什么书里教的范式这么好用领导还要搞一堆冗余字段”
    “为什么 group by 这么好用领导不允许在线上直接用,只允许在统计从库 /Hive 上用”
    要是业务就那么小那么简单,随便用,要是业务还有增长的机会,那就还是别用了
    redtea
    redtea
    Jun 30, 2019 via iPhone
    39
    存储过程是毒药
    xaplux
    xaplux
    Jun 30, 2019
    40
    不要写存储过程 不要写存储过程 不要写存储过程!
    禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
    springz
    springz
    Jun 30, 2019
    41
    问错地方了,这里大家吃屎吃多了,大部分都应该是把数据库当做一个可靠的 K/V 库用的,数据库本身的特性能不用最好不用。
    LeeChP
    LeeChP
    Jun 30, 2019 via iPhone❤️1
    42
    你可能不知道一个项目里有几万行存储过程是什么体验,我们一般用两个字形容这种架构师,傻逼!
    维护一下,你就懂了!
    weiming
    weiming
    Jun 30, 2019
    43
    领导没毛病,所有的存储过程一经使用都是遗留代码,过半个月你自己都不认得是谁写的。
    springz
    springz
    Jun 30, 2019
    44
    @v2overflow 翻了下记录,你说对了 SQL 真不是必选项。
    feiyunruyue
    feiyunruyue
    Jun 30, 2019
    45
    你见过 2000 行的存储过程吗?又想起来被存储过程支配的恐惧了。
    luckylo
    luckylo
    Jun 30, 2019 via Android
    46
    什么年代了,居然还有人想着用存储过程??回帖里基本都是否定这种的。如果你不信,你可以写个几百行存储过程,隔一两个星期再去阅读试下。
    opengps
    opengps
    Jun 30, 2019 via Android
    47
    我也这么觉得,一般的小公司普遍用人紧张,牛人留不住,做项目不敢做的太高深怕被员工牵制
    cabing
    cabing
    Jun 30, 2019
    48
    确实是很快恐怖。

    领导考虑的比较全量,是个好领导。
    woshifyz
    woshifyz
    Jun 30, 2019❤️1
    49
    新人就多学习,别天天想着领导是 sb
    keenkiller
    keenkiller
    Jun 30, 2019
    50
    只有在证券公司呆的时候见过存储过程,互联网公司没见用过的…
    luozic
    luozic
    Jun 30, 2019 via iPhone
    51
    存储过程依赖具体数据库,甚至依赖具体版本的数据库,你说呢。
    wenzhoou
    wenzhoou
    Jun 30, 2019 via Android
    52
    @oaix 就算你说的这个场景。你能保证业务不变更吗。
    回头领导一句话,你个我把这个字段和这个字段合并一起。然后你就傻眼了。还是得要换成应用侧处理。
    所以我觉得,别费那么大劲。就给搞成 Java 的。能跑就这么跑,不坑后人。
    txy3000
    txy3000
    Jun 30, 2019 via Android
    53
    1000 行的存储过程 玄学调试
    ps1aniuge
    ps1aniuge
    Jul 1, 2019❤️5
    54
    新领导要求不要用存储过程,说因为存储过程太复杂,后续的人不好接手... 要求所有数据的处理都读出来用 java 程序处理--------这样的人和公司和论调大把,甚至阿里也是这样说。但我说这纯属放 p。这是程序员 dis,dba 的一种说法。是程序员 dis 数据库开发人员的一种说法。

    和“ php 是世界上最好语言”一样,是一种偏见!!!

    存储过程没法进行版本控制-----凡是语言都能进行版本控制。

    数据库不带任何业务逻辑是正确的做法。------这是不可能的!
    业务需求数据库带有逻辑。你这种论调,只是把逻辑用另一种语言来实现而已。
    正确的是,数据库必须带有逻辑,
    必须带有冗余。
    必须分冷热数据。
    必须带有子库。即子库+母库。而字母库 1,又和字母库 2 互联。形成分布式库。
    字母库之间必须用语言,来互通消息。
    字母库之间必须用语言,来搬运数据。

    至于用这种语言,还是那种语言。用不用 sql,要扬长避短,而不是一味 diss sql。
    有的时候,你不用 sql 事务,你难以解决死锁。
    你不用唯一索引,难解决重复问题,要用程序,你就要引入分布式全局锁。
    这些难题用数据库,一下子就解决了,或一下子就没有了。



    一味 diss,我想大概有这么几个原因:
    1 没有 dba。但应用开发人员很多,所以强势。
    2 感觉,存储过程,sql 难,反人类。不好调试,没执行记录。------这些是 [应用开发人员] 偏见, [库开发人员] 不这么看。
    3 感觉 dba 难以沟通。难以协调 [应用开发人员] 和 [库开发人员] 之间的工作。

    结论:
    是偏见,但是偏见者众。
    数据库应该分层,第 1 层应该是内存的,因为快,应该是亲 [应用开发人员] ,如 redis。
    第 2 层,第 3 层。每层(字母库)之间有冗余,有逻辑整理,逐渐分冷热。逐渐符合数据库范式。
    hiboshi
    hiboshi
    Jul 1, 2019
    55
    领导是对的,不是每个人都会存储过程。未来也不好交接,没有专业 DBA 团队的公司不要用,互联网公司也不要用。很坑
    lincanbin
    lincanbin
    Jul 1, 2019 via Android
    56
    我工作这么多年,还没见过有用存储过程的公司。
    jaskle
    jaskle
    Jul 1, 2019 via Android
    57
    偷偷的告诉你:存储过程很简单,也没有第三方库,就一个好处:快!比任何方式操作数据库都快!没有可比性,尤其涉及到多表数据分析,用外部语言简直慢的不行,大量的网络 io 交换,大量的计划,总之存储过程就一个字:快!
    but,一堆维护问题,线上数据库基本不支持,移植基本死翘翘
    skiy
    skiy
    Jul 1, 2019
    58
    运营过程中就遇到过这坑。排查程序压根没发现问题。最后才发现是存储过程的问题。折腾死了。
    abcbuzhiming
    abcbuzhiming
    Jul 1, 2019
    59
    你领导没错,存储过程的维护成本和程序的维护成本完全不是一个级别的。除非不得不用存储过程,否则别用存储过程
    Y4ssss
    Y4ssss
    Jul 1, 2019
    60
    看到存储过程里,上千行的包含业务逻辑的 sql,你就知道为什么不推荐使用存储过程里
    killerv
    killerv
    Jul 1, 2019
    61
    数据库这种底层的东西最好不要和业务有什么牵扯。
    dog82
    dog82
    Jul 1, 2019
    62
    我自己是 DBA 出身,我是支持在项目中用存储过程的。
    但是要区分场合,事务性的肯定要写在代码里,报表和数据转换之类的操作用存储过程更简单直接
    auin
    auin
    Jul 1, 2019
    63
    如何你们有专职的 DBA,让他去说服领导,如果没有,你不要凑热闹
    whywhywhy
    whywhywhy
    Jul 1, 2019
    64
    @lincanbin 我这边是 ERP 软件甲方,乙方不给开放二次开发,乙方自己开发又慢,测试又不尽力,开发又不尽力。有时候真的超级烦,有的逻辑超想帮他们全部写好细节让他们直接搞直接修……

    然后有一天发现他们使用存储过程,于是就进去看……虽然不是 SQL 达人而且只会入门语句,竟然也看懂了不少。顿时对存储过程好感提升……
    alexmy
    alexmy
    Jul 1, 2019
    65
    换了一批人维护,后者肯定会诅咒前面写存储过程的人的。
    wenzhoou
    wenzhoou
    Jul 1, 2019 via Android❤️3
    66
    @ps1aniuge 也有可能不是偏见,是教训呢?
    我们线上的机器,应用服务器十几台,如果 CPU 或内存不够了,再上七八台很容易。应用服务器崩了就崩了没事的。
    数据库服务器,就两台,如果 CPU 或内存不够了,整个业务死翘翘。
    为什么不多搞几台,因为代价和应用服务器不是一个数量级的。我们用的 Oracle 的版权死贵,出了问题请 Oracle 专家来,那个价格真心不便宜,而且耗时间等不起。
    曾经出现过,调查 bug 的人去服务器上敲了一条 select 语句,导致生产数据库长时间没反应。后果可想而知。从那以后所有人就知道把数据库服务器当宝贝了。
    数据库服务器,就是要 io 性能超好,你看似一次检索出来的数据量太大,但是就算是几百 M 数据这对于内网的数据库,都不是问题。反而是 CPU,有两个问题。一个是版权是按照 CPU 内核数收费的,再一个 CPU 再好也经不起折腾,你把排序,数值加减放到数据库服务器上运算,那就是拿着尚方宝剑去切肉。所以一般数据库专用服务器都放弃 CPU 了。
    所以说不是不想用存储过程,实在是条件不允许。
    当然你单机跑,或者没上线之前做数据移行,那随你高兴。

    所以再强调一遍,不要在数据库服务器上玩火是绝对政治正确的。
    calming
    calming
    Jul 1, 2019
    67
    写存储过程完全是给后面人挖坑
    Ritr
    Ritr
    Jul 1, 2019
    68
    开发难度:★
    维护难度:★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    lihongjie0209
    lihongjie0209
    Jul 1, 2019
    69
    @ps1aniuge
    数据库不带任何业务逻辑是正确的做法。------这是不可能的!

    请你证明一下数据库必须带业务逻辑
    Sypher
    Sypher
    Jul 1, 2019
    70
    @PerFectTime 然鹅我司就是遇到了 5#所说的远古业务死锁的问题....

    简直一座屎山...
    Sypher
    Sypher
    Jul 1, 2019
    71
    屎山这个词笑死我了
    Caballarii
    Caballarii
    Jul 1, 2019
    72
    当年还是菜鸟程序员的时候遇到有外键删不掉数据这种事以后,我就发誓再也不在数据库上搞任何带有业务逻辑的东西了嘿嘿
    youEclipse
    youEclipse
    Jul 1, 2019
    73
    @LeeChP 给架构师倒一杯卡布奇诺
    FrankHB
    FrankHB
    Jul 1, 2019
    74
    @v2overflow 醒醒,DBMS 不是 RDBMS,没空没历史遗产倒腾啥 SQL。
    la2la
    la2la
    Jul 1, 2019
    75
    挺正常的,我们这主库的数据,要定时放到测试库中和定时清理到 hive 中(大的表数据上亿了),本来建议使用 kettle,但是领导坚持写 python 脚本,不过好处就是脚本大家都看得懂,有人请假问题也不大。
    FrankHB
    FrankHB
    Jul 1, 2019❤️4
    76
    > 存储过程没法进行版本控制-----凡是语言都能进行版本控制。
    肤浅。控制到什么程度?“凡是语言”?给你一坨 Piet 代码你能 diff 得让人看?

    > 你这种论调,只是把逻辑用另一种语言来实现而已。
    废话。只是工程上能用的“另一种”语言想要比带所谓存储过程的语言实现此类需求能力更稀烂还是不太容易的。

    > 必须带有子库。即子库+母库。而字母库 1,又和字母库 2 互联。形成分布式库。
    前面的瞎眼论调先无视。整个生命周期都没要分布式的业务,照你这坨还应该没事瞎搞个分布式架构?这是什么精神?

    > 2 感觉,存储过程,sql 难,反人类。不好调试,没执行记录。------这些是 [应用开发人员] 偏见, [库开发人员] 不这么看。
    抛开实现是不难。但是[语言开发人员]就是要 diss 一坨不知本分还要跨领域碰瓷的 DSL 了,不服?
    shuizhengqi
    shuizhengqi
    Jul 1, 2019
    77
    我还真没见过存储过程,你是刚从书上学来的?
    Actrace
    Actrace
    Jul 1, 2019
    78
    你遇到了一个好领导,珍惜啊。
    Actrace
    Actrace
    Jul 1, 2019
    79
    补充一下,SQL 本质还是查询语言,用来做逻辑性的事情总感觉不合适。
    enaxm
    enaxm
    Jul 1, 2019
    80
    @springz #35 赞同。问题是大学 数据库系统原理 教材里头这玩意反而是难点

    唉,上古的屎
    brust
    brust
    Jul 1, 2019
    81
    有存储过程的项目就是一座屎山
    不过有一个好处,如果自己维护简单,别人维护复杂
    写出了别人难以维护或者无法维护的代码相当于增加自己的核心竞争力
    当然前提是这个模块很重要,无法被重构的那种
    wysnylc
    wysnylc
    Jul 1, 2019
    82
    首先存储过程是垃圾
    其次业务逻辑在代码中没有丝毫问题,分布式就是要去 join 去子查询才能拆分数据库,join 会导致表之间关联锁死无法拆分
    JohnSmith
    JohnSmith
    Jul 1, 2019
    83
    过来人经验,sql 服务器经常莫名高资源占用,没有 trace 信息,找不到原因,代码无法维护,难以 debug。重构也相当困难,害人害己!
    存储过程可以类比成现代框架中的 faas,但是缺少必要的 trace,metrics,log 以及统一的控制后台。
    在类比一下,就和微服务架构缺少 devops 一样~
    onionKnight888
    onionKnight888
    Jul 1, 2019
    84
    维护过上古业务的存储过程,真是恶心吐了
    JohnSmith
    JohnSmith
    Jul 1, 2019
    85
    任何团队项目都需要重视工程规范和工程标准化
    FrankHB
    FrankHB
    Jul 1, 2019
    86
    @Actrace SQL 名义上确实是“查询”(“ Q ”)语言,但规格上至少包含 DML/DDL/DCL。以查询为中心的 SQL 名义上是声明式语言,但实际上已经是大杂烩了。
    实际实现野心更大,什么乱七八糟的功能都想掺和(很多所谓内置函数的干活附会到“查询”上也是可以的,但本质早就和 DB 无关了),给 DBA 偷懒以外就是给手贱不懂正确选型的开发喂屎而已。
    “可扩展”的存储过程算是这种不切实际的鸡肋野心的进一步实现。半吊子 UI 能顶几个靠谱的 API 呢,谁用谁知道,是不是混了斯德哥尔摩综合症就难说了……
    l00t
    l00t
    Jul 1, 2019❤️1
    87
    从没觉得存储过程不好维护…… 写得是不是容易让人理解,这得看写的人的风格,和读的人的习惯。同一个操作,你可以写成很多人理解有困难的集合运算,也可以像别的语言一样游标里 for 一下逐条处理。要说行数太多,也完全可以拆分成多个函数和存储过程,甚至加入 package,和别的语言有啥大区别?纯粹是技术栈的问题罢了。

    不能版本控制更是扯谈。在数据库里编译运行的就不能把代码拉出来写成脚本单独管理了?

    另外写存储过程的语言不是 SQL !它只是能无缝集成 SQL 罢了,本质上和 SQL 还是两种不同的语言。

    不容易横向扩展倒是真的。
    VictorJing94
    VictorJing94
    Jul 1, 2019
    88
    存储过程是很好的解决方案....
    jsnjfz
    jsnjfz
    Jul 1, 2019
    89
    看过几千行存储过程的飘过。。。其实不算复杂的,但是不利于管理
    ericgui
    ericgui
    Jul 1, 2019
    90
    rockyou12
    rockyou12
    Jul 1, 2019
    91
    任何系统(软件也好,盖房子造飞机也好),性能都不是最重要的,健壮性才是,而且是用血的经验总结出来的。

    上面还是有部分回复觉得存储过程没问题,你要是有个存储过程跑了几年而且不会去改那才是没有问题。我们现在生产就有业务依赖存储过程,每年总有 1、2 次会有死锁然后要手动重启。好像不是大问题但每次都只有客户说了我们才知道,体验极差。

    可能又有人说这是你们数据库维护水平不行,废话,你是领导同样的钱,或者给你同样时间让你学习,你是要精通数据库何种边边角角功能,还是精通业务开发能快速把业务写好 bug 又少的。
    wupher
    wupher
    Jul 1, 2019❤️1
    92
    它们都只是技术而已,使用的情况么,看场景。

    CS 程序员和产品会更喜欢存储过程。比如 XX 管理系统,XX 财务系统,主要业务逻辑都是使用存储过程封装。到客户那边修改逻辑实现,去数据库中改下存储过程即可,而不是使用 Delphi、C#、VC 什么的重新编译一个客户端或者 DLL,再部署。

    但是在 Web 后端看来,这个解决方案就坑了。你写成 Java、C# 、Python 什么的,可以在无数应用服务器上并发运行。写成存储过程,就只能在数据库里面跑了。性能相差可能数据级别。存储过程,后面如果碰上数据迁移,比如 Oracle 转 MySQL、MySQL 转 HBase 基本上全得重新开发,而后端服务不受此影响。

    都是抉择,无非取舍而已。
    l00t
    l00t
    Jul 1, 2019
    93
    @rockyou12 #91 死锁和存储过程有啥关系?同样的代码你换个别的语言写就不死锁了?出现死锁,首先要排查出真正的原因,而不是推到存储过程上面。
    lihongjie0209
    lihongjie0209
    Jul 1, 2019
    94
    @l00t 存储过程怎么排查死锁问题?
    l00t
    l00t
    Jul 1, 2019
    95
    @lihongjie0209 #94 你别的语言怎么排查存储过程就怎么排查啊。
    Vegetable
    Vegetable
    Jul 1, 2019
    96
    主要还是这门技术不够现代化
    jiom
    jiom
    Jul 1, 2019
    97
    之前交接前辈的储存过程,我看了一个月,8K 多行。回想一下,想哭
    lihongjie0209
    lihongjie0209
    Jul 1, 2019
    98
    @l00t 打断点, dump 线程, 写日志 存储过程可以做到哪一步?
    q397064399
    q397064399
    Jul 1, 2019
    99
    Structured Query Language

    干好 Query 的事情就好了,迁移这些东西 说得不好听点,除了一行 SQL 跟 update insert 能搞定的事情,
    最好不要用 SQL,存储过程无法调试,MySQL 那个报错又是反人类中的反人类,而且这东西没有
    Trace 没有 Log , 鬼知道线上迁移的时候会出什么幺蛾子,用 Java 迁移 至少知道哪一块出了问题


    ------
    另外你真的遇到了一个好领导了,我之前在的一个公司 领导恨不得把存储过程 人手普及一下,
    说实话很多数据库的东西 都可以扫进垃圾堆了。

    另外 DBA 如果看不懂代码操作了什么,我一般都是建议 用 Java 直接生成中间的 SQL 脚本 打死也不用存储过程
    l00t
    l00t
    Jul 1, 2019
    100
    @lihongjie0209 #98 每一步都可以啊
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1071 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 155ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.