存储过程类似于面向过程语言当中的函数,可以实现面向过程语言当中的声明变量、逻辑判断、条件循环等操作,是一组完成特定功能的SQL语句集合。存储过程能让数据库运行速度更快、SQL安全性更高。银行有很多OLTP应用使用Oracle、Db2的存储过程功能来实现业务需求,比如PACKAGE、存储过程调试/PLDEBUGGER、自治事务等。一般分布式数据库或分布式数据库中间件是不支持存储过程的,或支持的很少、不全。如果国产数据库对存储过程不支持、或功能太弱,要做整个系统的存储过程改造会是非常艰巨的任务、甚至会导致无法迁移。
请各位同行们能分享现在有哪些国产关系型数据库支持存储过程功能?支持功能的丰富度怎么样?
目前我们使用的华为gaussdb支持存储过程,tdsqlmysql版本中分布式实例不支持存储过程,集中式实例支持存储过程。tdsql pg版本支持存储过程。另外,测试过的ob也支持存储过程。总体来看,交易型系统优先通过程序去改造存储过程,分析型系统目前国产分布式数据库也可以满足存储过程的迁移。
收起首先OceanBase数据库是支持存储过程的,功能在分布式数据库来讲还不错。还有一些传统类型的国产数据库也是支持存储过程的,例如PG条线的国产数据库。
但针对存储过程这个话题,其实我也可以大致的说一下,我们采用的国产数据库是OB,但存储过程这块我们基本没用,从源系统改造过来的系统,大部分我们都要求改造了。不使用存储过程我们是基于以下几个原因,1是更加方面数据库的替换,因为存储过程在每个国产数据库实现方法不太一样,语法也不太一样,我们必须做好快速方便替换数据库的准备。2是OB数据库是分布式数据库,放一个传统类型的存储过程在上面,特别对于多中心部署架构来讲,可能性能并不佳,同时相对于应用的扩展能力来讲,存储过程是在数据库服务器端执行的,并发能力可能就会受限。
所以既然改造,长痛不如短痛。能改造的尽量就改了。存储过程这个是Oracle时代的产物,国产数据库使用起来怎么样,有待验证。可能对于特定的业务系统,还是有用的价值。
国产分布式数据库对于存储过程的支持有限,并且厂商也不建议使用存储过程,部分厂商都不建议使用存储过程进行生产刷数处理,可见分布式数据库的存储过程是支持,但还没有达到生产级可用级别,另外在分布式数据的场景下,存储过程处理分布式数据及分布式事务的挑战也非常大,远远大于应用实现,对于扩展性也是有限,严重依赖于数据库集群,对于重要业务系统来说,还是避免使用存储过程
收起OB目前看来还不错,向Oracle兼容。但是如果想替换到国产数据库可能面临很多不兼容,可以退而求其次在应用端实现逻辑,这样写后端的水平要求反而变高了。如果替换国产开发能力一定得跟的上。
收起从国产数据库现状了解,达梦数据库是最接近ORACLE数据库,ORACLE数据库的存储过程在此数据库上大部分都无需调整,直接运行;基于PG的数据库如华为高斯、腾讯TDSQL_PG等对存储过程支持也不错,大部分存储过程也无需调整就能直接运行,好些数据库介绍基于他们的迁移工具迁移成功率99%,仅需几天就完成一套系统迁移。
收起目前国产关系型数据库中,支持存储过程功能的主要有以下几种:
需要注意的是,虽然这些国产关系型数据库都支持存储过程功能,但在具体的功能实现和性能表现上还是有差异的,需要根据具体的业务需求进行选择。同时,由于国产数据库的发展还比较年轻,可能在一些细节方面还存在不足,需要在实际使用中进行验证和优化。