浅谈系统优化设计--复杂运算放在逻辑层还是在数据库层?
前段时间,我们去回访客户,看了今年上半年优化的一个系统,看看性能怎么样。去了以后,客户反映感觉还可以,不慢,就是说这段时间数据库服务器的CPU有时超过了90%,会持续一段比较长的时间,可能有几十分钟。
下午,就发现这时候数据库服务器的CPU一直在90%以上。通过sql server profile也没查出什么问题。觉得操作很正常,后来通过DMVs发现,执行我以前改写的几个存储过程,执行次数比较多,但是估计前台调用很频繁。
后来通过他们的联系和交流,结果是:有不少业务人员在操作完数据后,再去查一次我以前写那几个对账存储过程(最多超过450行)调数据。
这里介绍一下对账存储过程:
以前因为将对账逻辑封装在JBOSS应用层,当时发现查询速度慢,一旦查询的人多,jboss的cpu就一直是100%,业务无法操作,但数据库服务器还好。后来我就将其全部逻辑封装在数据库层(4个存储过程,3个函数),速度比以前大大提高。
注: 这里的对账有好几个角度,所以有4个存储过程。
分析结果:
业务人员大量调用对账存储过程进行复杂计算
开始我跟客户讲:这里的对账,是比较复杂的逻辑计算,是比较耗CPU的,一般使用的比较少,
一个业务人员一个月查一次都不错了,而现在是下面10多人在持续调用。所以数据库服务器CPU一直在90%以上,但幸运的是客户的系统并没因为90%而引起速度慢或者是Down机情况,业务正常运行。
经过这件事,我一直在想,复杂逻辑计算是放在逻辑层还是放在数据库层好啊?
查了一下资料,解决复杂逻辑有:
1,建立同步数据库,将读和写分离。(使用比较多) 如:淘宝网
2,将复杂逻辑计算放在逻辑层,当然SQL语句是经过优化过的(在逻辑层做集群服务,分成多台应用服务器JBOSS): 如 ebay
当然上面两个方法都有他的好处,看大家怎么使用了。我个人倾向第一种,将业务逻辑放在数据库层,也正如Tom在《Oracle 高效设计》提倡的尽量使用数据库来提高性能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具