FkingMan
V2EX  ›  数据库

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

  •  
  •   FkingMan · May 5, 2024 · 4221 views
    This topic created in 912 days ago, the information mentioned may be changed or developed.

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

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

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

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

    存储过程的好处就是:

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

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

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

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

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

    缺点是平时得养着这些 IBM 的专家,因为出问题了我们没法排查,压根就看不懂写的什么。
    NXzCH8fP20468ML5
    NXzCH8fP20468ML5
    May 6, 2024 via Android
    33
    @sun1991 废话,出了事情为什么不甩锅?
    FkingMan
    FkingMan
    OP
    May 7, 2024
    34
    @Aksura 我是觉得,用 java 取数据,可能要频繁的网络 IO,一次 http 请求 fetch 很多数据用 java 计算会很慢,再加上用 sql 写业务还是有局限性,直接用存储过程计算会不会更方便,PLSQL 能处理更复杂逻辑,然后计算完结果直接传给 java ,这样会更高效更灵活
    Aksura
    Aksura
    May 7, 2024
    35
    @FkingMan 你提到的这个 IO 的情况,以及如果是从数据库取出一堆数据再在 java 里加工,那就等于是在 java 里自己又实现了一遍数据库的处理功能。正好对应我上面提到的第 1 和第 2 点,所以应该在数据库中完成计算,再把计算完成的结果传回到 java 中进行下一步处理。我的观点是,是存储过程里要完成的计算应该严格限制在表的操作上,“业务”的逻辑不只包含表的操作,不能因为 PLSQL 是过程化的语言,就把业务逻辑都写进存储过程里,甚至到了把 java 等后端完全当作一个透传的接口的地步。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5194 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 06:35 · PVG 14:35 · LAX 22:35 · JFK 01:35
    ♥ Do have faith in what you're doing.