作者:平凯数据库架构师
如果你接手过一个运行十年以上的企业系统,大概率会遇到一种情况:数据库里躺着大量存储过程。在平凯数据库参与的一些系统架构升级项目中,这样的情况其实并不少见。有些几十行,有些几百行,甚至上千行。文档不完整,调用关系复杂,但它们却承载着系统最核心的业务逻辑。
很多团队对这些代码都有一种微妙的态度:能不动,就尽量不动。
但在最近几年,越来越多系统重构项目中开始出现一个明显变化:架构师开始主动减少存储过程。
这并不是因为存储过程突然“变差了”。恰恰相反,在过去很长一段时间里,它曾经是一种非常聪明的工程设计。
在服务器昂贵、网络带宽有限的年代,让业务逻辑尽可能贴近数据执行,可以显著减少网络往返,提高系统效率。因此数据库不仅负责存储数据,也承担了不少计算和控制逻辑。很多企业系统正是在这样的背景下成长起来的。
但当系统进入云原生和分布式时代,软件工程环境已经发生变化。
系统架构关注的重点,也在慢慢发生转移。问题不再只是性能。而是系统是否能够持续演进。
一、问题不在性能,而在演进能力
很多人提到存储过程时,第一反应往往是性能。这确实是它当年流行的重要原因。复杂计算放在数据库内部执行,可以减少应用与数据库之间的网络交互。
但在实际的企业系统中,性能问题本身也可能成为一种新的负担。
当大量复杂逻辑集中在数据库存储过程中执行时,这些任务往往会占用大量数据库计算资源。一旦数据库资源被长时间占用,其它正常 SQL 请求就可能出现排队和积压;而请求积压又会进一步影响存储过程的执行效率,系统整体吞吐量下降,甚至形成一种相互放大的恶性循环。
因此,在一些系统中,存储过程不仅没有成为性能优化手段,反而可能演变为数据库资源竞争的集中点。
在一些数据库架构优化项目中,我们也经常看到类似情况:当大量复杂逻辑集中在数据库内部执行时,数据库往往同时承担数据存储与业务计算两种角色,资源竞争问题也随之出现。
但从长期架构视角来看,性能往往并不是系统最大的限制因素。在今天的大多数企业系统中,真正决定系统可持续发展的,往往是系统是否具备良好的演进能力。
随着业务规模扩大,系统复杂度不断提升。一个成熟的企业系统往往需要持续迭代十年以上,期间会经历多次业务调整、架构升级以及技术替换。在这样的长期周期中,系统是否容易维护、是否容易验证修改的影响范围,往往比单次执行效率更加重要。
当大量业务逻辑沉淀在数据库存储过程中时,这种演进能力往往会受到限制。与应用代码相比,存储过程通常很难融入完整的软件工程体系。例如,应用层代码可以通过 Git 进行版本管理,可以通过 Code Review 进行团队协作,也可以在 CI/CD 流水线中进行自动化测试和持续部署。而存储过程往往依赖手动脚本部署,版本追踪不完整,自动化测试体系也难以建立。
在复杂系统中,一个看似简单的存储过程,可能被多个模块反复调用。当需要对其进行修改时,开发团队往往很难迅速判断其影响范围。由于缺乏系统化测试机制,任何改动都可能带来潜在风险,因此许多团队在面对这些逻辑时会变得格外谨慎,甚至形成一种“能不动就不动”的局面。
从工程角度看,这种状态意味着系统正在逐渐失去演进弹性。性能也许仍然稳定,但架构已经变得难以调整。
二、逻辑沉淀,是资产还是耦合?
对于许多企业来说,数据库中的存储过程往往被视为系统最核心的资产。毕竟这些代码沉淀了多年的业务规则,很多复杂逻辑都隐藏在其中。从业务角度看,它们确实是企业经验的体现。
但从架构视角来看,这些沉淀的逻辑也可能带来另一种问题——系统耦合。当业务逻辑深度绑定在数据库实现上时,数据库本身就不再只是一个数据管理组件,而成为系统架构的核心枢纽。一旦数据库需要升级、迁移或者进行分布式改造,这些逻辑就会成为最大的阻力。
在许多数据库迁移项目中,技术团队往往会发现,表结构迁移并不是最困难的部分。真正复杂的,是那些嵌套调用、逻辑分支复杂、缺乏文档的存储过程。由于这些代码往往依赖特定数据库语法和执行机制,即使语法可以兼容,其运行行为也未必完全一致。
更重要的是,存储过程之间往往存在复杂的调用关系。一个底层模块的改动,可能影响多个上层业务逻辑。这种耦合关系,使得系统架构在面对技术演进时变得格外脆弱。
因此,越来越多企业在重新评估系统架构时,会提出一个问题:这些沉淀的逻辑,究竟是资产,还是一种结构性绑定?如果逻辑无法迁移、无法拆分、也无法独立演进,那么它们很可能既是资产,也是束缚。
三、架构的归位:分层与解耦
随着分布式架构和云原生体系逐渐成熟,企业系统的设计理念也在发生变化。越来越多架构团队开始重新划分系统的能力边界,让不同层次承担更清晰的职责。
在这种架构思路中,数据库的核心任务是提供稳定、高效的数据管理能力,而复杂的业务逻辑则逐渐被迁移到应用层或服务层。在一些新一代数据库架构设计中,这种“数据库负责数据、应用负责逻辑”的分层思路也正在成为越来越普遍的实践,而这也是平凯数据库一直强调的:数据库负责可靠存储与高性能查询,而应用服务负责业务规则、流程控制以及计算逻辑。
这种分层带来的最大变化,是系统耦合度的降低。
当逻辑位于应用层时,它可以使用标准编程语言实现,可以纳入完整的软件工程体系,也可以通过自动化测试持续验证其正确性。开发团队能够更加灵活地调整业务逻辑,而系统架构也具备更强的可迁移性和扩展能力。
更重要的是,逻辑一旦从数据库内部解耦出来,系统的技术路径也会变得更加开放。数据库升级、架构扩展甚至技术替换,都不再需要面对复杂的逻辑绑定问题。
从长远来看,这种架构调整并不是简单的技术选择,而是系统可持续演进能力的一种体现。
当应用层负责“聪明”,数据库层负责“可靠”时,整个系统的鲁棒性会发生质的飞跃。
四、趋势的放大器:AI Coding 的到来
如果说云原生改变了系统的部署方式,那么 AI Coding 正在改变软件的生产方式。在这个背景下,存储过程的一些问题会被进一步放大。
AI 对研发效率的提升,很大程度上依赖于标准化的工程语义和开放的工具链。现代应用代码(如 Java、Go、Python)拥有成熟的测试和部署体系,AI 很容易参与其中。
但存储过程通常使用数据库方言,缺乏标准化描述,也很难融入现代 CI/CD 流程。当 AI 尝试参与存储过程维护时,由于缺乏上下文和测试环境,其生成建议往往难以验证。
于是就会出现一种情况:应用层在 AI 的帮助下效率快速提升,而存储过程却逐渐成为拖慢团队效率的“长尾”。
与此同时,软件与数据之间的交互方式也在变化。
未来的数据访问,不再只是简单的 SQL 查询,而越来越多通过服务接口或语义调用完成。如果逻辑被硬编码在数据库内部,这种紧耦合结构会直接限制系统的灵活性。
从这个角度看,存储过程更像是一个透明度较低的“逻辑黑盒”。AI 越强大,这种架构带来的演进摩擦就越明显。
总结来看,AI Coding 的到来让系统架构进入了“优胜劣汰”的加速期。 架构师们重新思考存储过程,并不是在否定过去的工程智慧,而是在为未来的“智能化演进”扫清障碍。当应用层足够“聪明且灵活”,数据库层足够“可靠且纯粹”时,系统才能在 AI 浪潮中保持轻盈,实现真正的持续演进。
当系统开始以这种方式演进时,数据库才能回归其最擅长的角色——稳定、高效的数据底座,而业务逻辑则拥有更大的发展空间。这也是很多数据库架构设计正在努力实现的目标:让数据库专注于数据,让应用专注于业务。当然,这也是平凯数据库的架构设计中一直强调的。对于很多企业来说,这种调整不仅是一次技术选择,更是系统迈向未来的重要一步。