PLSQL 等等存储过程在现在时代背景下是否可以继续使用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FkingMan
V2EX    数据库

PLSQL 等等存储过程在现在时代背景下是否可以继续使用?

  •  
  •   FkingMan 2024-05-05 19:18:47 +08:00 3263 次点击
    这是一个创建于 527 天前的主题,其中的信息可能已经有所发展或是发生改变。

    过去四年,一直在维护一个银行的借记卡系统,核心功能是由外国人开发,使用 PLSQL ,几乎所有业务都是使用的 PLSQL 实现,java 实现的接口几乎就是透传,我一直有个疑问,在现在这个时代背景下,是不是还需要使用 PLSQL 实现业务?

    35 条回复    2024-05-07 08:25:50 +08:00
    hefish
        1
    hefish  
       2024-05-05 20:01:04 +08:00
    需要的。跟钱有关的,搞个 Oracle 很合理。
    chuck1in
        2
    chuck1in  
       2024-05-05 20:26:26 +08:00
    那个年代的系统都是这样的,现代系统很少用了。
    fengyie007
        3
    fengyie007  
       2024-05-05 22:31:05 +08:00 via Android
    新系统一般不会再用了吧。但作为老系统替换成本还是很高的,而且一般收益也不大,吃力不讨好的事一般不会有人去做。
    sakilascott
        4
    sakilascott  
       2024-05-05 22:42:35 +08:00 via Android
    除非特别大的系统,实际上大部分系统用存储过程维护成本反而更低。
    但是,mysql 的计算性能,根本跑不了存储过程,云厂商又要忽悠大家用 mysql 。。。
    echo1937
        5
    echo1937  
       2024-05-05 23:23:25 +08:00 via iPhone
    传统行业做核心业务这块,大型机加 oracle 是可以承载的,但现在不会了,一是贵,二是供应链不安全。
    ivvei
        6
    ivvei  
       2024-05-06 01:51:58 +08:00
    现在这个时代有何不同?
    xhawk
        7
    xhawk  
       2024-05-06 05:43:28 +08:00 via Android
    plsql 挺优秀的,就是能用 plsql 只有 oracle.国内的 oceanbase 还有其他的一些数据库也模仿 oracle. post gres 倒是有些 plsql 的创新,能生成 restapi ,但是在 plsql 里头,最优秀的是对包的管理,缺的,麻烦的是对代码的版本管理和格式化。当然,今日,完全可以不用 plsql ,一定要尽量思考如何前端,后端分离
    kkwa56188
        8
    kkwa56188  
       2024-05-06 06:14:28 +08:00
    跟金融业有关的, 还是得 Oracle, 新版 (其实很久了)早就可以 把 plsql 直通 restful 了, 只是贵和生态绑定, 一般的创业公司用不起
    mingl0280
        9
    mingl0280  
       2024-05-06 07:36:34 +08:00 via Android   1
    银行系统,敢提取消存储过程的都是勇士。
    NXzCH8fP20468ML5
        10
    NXzCH8fP20468ML5  
       2024-05-06 07:38:41 +08:00   1
    @mingl0280 现在银行核心早就禁止了存储过程了。
    mingl0280
        11
    mingl0280  
       2024-05-06 07:42:48 +08:00 via Android
    @xxfye 你高兴就好
    NXzCH8fP20468ML5
        12
    NXzCH8fP20468ML5  
       2024-05-06 07:50:22 +08:00
    @mingl0280 我就在干这件事情
    mingl0280
        13
    mingl0280  
       2024-05-06 07:56:55 +08:00 via Android
    @xxfye 也就是说你们开发团队自己背数据库不一致的风险咯?
    mingl0280
        14
    mingl0280  
       2024-05-06 08:03:31 +08:00 via Android
    NXzCH8fP20468ML5
        15
    NXzCH8fP20468ML5  
       2024-05-06 08:03:34 +08:00 via Android
    @mingl0280 数据库不一致是啥问题,你是想说数据不一致?
    mingl0280
        16
    mingl0280  
       2024-05-06 08:15:39 +08:00 via Android
    @xxfye 比方说记账/事务写入比较复杂的时候,不使用存储过程难免遇到需要多次插入,如果这个过程中有部分数据库或者连接故障,这个不一致的风险和造成的损失肯定就要你们银行自己解决了。所以你们是自己扛了这部分的风险了吧?
    murmur
        17
    murmur  
       2024-05-06 08:22:42 +08:00
    见过这种设计,写一大堆存储过程和函数,美其名曰在线部署不需要重启服务器
    blankmiss
        18
    blankmiss  
       2024-05-06 08:26:07 +08:00
    我们这边的 ERP 系统 报表和单据就是存储过程 一个 sql 一千多行
    xwwsxp
        19
    xwwsxp  
       2024-05-06 08:28:17 +08:00
    @murmur 是的,都 AI 时代了,总有人抱着祖宗之法不可变,殊不知,明朝和大清都灭亡好多年了,最后一任皇帝,坟头草都老高了。
    NXzCH8fP20468ML5
        20
    NXzCH8fP20468ML5  
       2024-05-06 08:36:04 +08:00 via Android
    @mingl0280 为啥会出现多次插入?
    应急方案是啥?能否回退?业务如何规避?今晚能不能解决?
    防重放的设计咋写的?为什么能过评审,为什么代码能过 review ?测试为什么测不出来?业务为什么测不出来?平时的灰度吃屎了?
    如果上面的重重防线都被击穿,还造成了比较大的社会影响,那就麻烦主管科技的副行长去人行金管局解释一下了,毕竟这个改造任务是总行下达的嘛。
    hutoer
        21
    hutoer  
       2024-05-06 08:37:33 +08:00
    leegradyllljjjj
        22
    leegradyllljjjj  
       2024-05-06 08:44:49 +08:00 via iPhone
    Proc 是挺恶心的,代码乱飞 也就这些传统行业的老人愿意用
    Aksura
        23
    Aksura  
       2024-05-06 09:00:17 +08:00
    > 几乎所有业务都是使用的 PLSQL 实现,java 实现的接口几乎就是透传

    这种用法毫无疑问就是历史遗留问题,维护旧系统那就算了,新系统绝对不会这么使用。

    > 在现在这个时代背景下,是不是还需要使用 PLSQL 实现业务?

    存储过程的好处就是:

    1. 负载发生在数据库服务器上。
    2. 充分利用数据库的批量数据处理能力。
    3. 充分利用数据库的事务能力。

    能用到这 3 个好处之一的那些仅数据操作的逻辑,可以放到存储过程里。其他任何逻辑都应该在数据库外完成。业务逻辑肯定是不该放到存储过程里了。
    chendy
        24
    chendy  
       2024-05-06 09:00:35 +08:00   1
    历史原因用过程没问题
    新业务用过程要么是被逼无奈要么是有病
    维护难,定位问题难,扩展性差,招人也不好招
    sun1991
        25
    sun1991  
       2024-05-06 10:47:23 +08:00
    @xxfye
    应急方案是啥?能否回退?业务如何规避?今晚能不能解决?
    防重放的设计咋写的?为什么能过评审,为什么代码能过 review ?测试为什么测不出来?业务为什么测不出来?平时的灰度吃屎了?
    如果上面的重重防线都被击穿,还造成了比较大的社会影响,那就麻烦主管科技的副行长去人行金管局解释一下了,毕竟这个改造任务是总行下达的嘛。

    -- 说了这么多, 感觉都是在甩锅. 强数据一致性到底是怎么实现的?
    mingl0280
        26
    mingl0280  
       2024-05-06 10:52:00 +08:00 via Android
    @xxfye 明白了,确实是直接把风险给银行开发了。谢谢指导。
    wysnxzm
        27
    wysnxzm  
       2024-05-06 10:52:14 +08:00
    @xxfye #10 他们认为只有存储过程才能实现强一致性,都这样了就随他们去吧
    R4rvZ6agNVWr56V0
        28
    R4rvZ6agNVWr56V0  
       2024-05-06 11:27:01 +08:00
    我觉得唯一的问题是:不利于架构演进和改造。
    cloudzhou
        29
    cloudzhou  
       2024-05-06 11:45:32 +08:00
    @mingl0280 一致性不是一定依靠存储过程,事务做得好,也能得到同样的效果,然后就是交易强一致,其他边缘弱一致,或者说最终一致

    存储过程是把所有的逻辑过程,变成 PL/SQL 脚本,甚至可以理解为代码本身了
    这样的问题是,调试、开发、并发,都有很大的缺陷
    很多年前维护过,确实不利于大规模迭代开发,需求快速变更等
    burymme11
        30
    burymme11  
       2024-05-06 11:52:53 +08:00
    @ivvei 现在国家在各型企事业单位都在大力推信创,都想要换国产的系统。不知道这个会不会影响到。
    ervqq
        31
    ervqq  
       2024-05-06 11:57:21 +08:00
    我司的返利系统都是靠存储过程计的
    midsolo
        32
    midsolo  
       2024-05-06 12:34:13 +08:00
    花巨资请 IBM 的专家来设计核算跟核销系统,核心逻辑就是 2 个存储过程,一个 8000 多行,操作 37 张表;一个 5000 多行,操作 29 张表...

    优点是逻辑都是写在存储过程中,需求变动不需要重启服务器,改 SQL 就完事了。

    缺点是平时得养着这些 IBM 的专家,因为出问题了我们没法排查,压根就看不懂写的什么。
    NXzCH8fP20468ML5
        33
    NXzCH8fP20468ML5  
       2024-05-06 13:51:32 +08:00 via Android
    @sun1991 废话,出了事情为什么不甩锅?
    FkingMan
        34
    FkingMan  
    OP
       2024-05-07 03:37:30 +08:00
    @Aksura 我是觉得,用 java 取数据,可能要频繁的网络 IO,一次 http 请求 fetch 很多数据用 java 计算会很慢,再加上用 sql 写业务还是有局限性,直接用存储过程计算会不会更方便,PLSQL 能处理更复杂逻辑,然后计算完结果直接传给 java ,这样会更高效更灵活
    Aksura
        35
    Aksura  
       2024-05-07 08:25:50 +08:00
    @FkingMan 你提到的这个 IO 的情况,以及如果是从数据库取出一堆数据再在 java 里加工,那就等于是在 java 里自己又实现了一遍数据库的处理功能。正好对应我上面提到的第 1 和第 2 点,所以应该在数据库中完成计算,再把计算完成的结果传回到 java 中进行下一步处理。我的观点是,是存储过程里要完成的计算应该严格限制在表的操作上,“业务”的逻辑不只包含表的操作,不能因为 PLSQL 是过程化的语言,就把业务逻辑都写进存储过程里,甚至到了把 java 等后端完全当作一个透传的接口的地步。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5842 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 01:46 PVG 09:46 LAX 18:46 JFK 21:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86