把业务逻辑从存储过程中拿出来

对于业务逻辑放在存储过程中的情况,目前比较有市场的看法是: “不要把业务逻辑放在DB中,除非有性能问题”
日前,我却遇到另外一种情况:
首先说一下业务(简化过的):
酒店预订系统,酒店是按天计算价格的,酒店合同价格是按时间段的,后录的合同如果时间上与原来的重合,则使用后录合同的价格。
现在的问题是从酒店合同价格计算预订时间段内的价格。主要有三个步骤:
1.分割:把合同价格的时间段按天分割到每天的价格
2.选择:选择每天上比较后录的合同的价格
3.归并:按价格相同与否,将每天的价格归并成时间段
之前是用存储过程做的。(因为这样会减少网络传输),而且不是一个存储过程,因为不同的价格计算条件和方式有一些微小的差别。
很不幸,业务有变化了,这些存储过程都要改动,而且目前有了一些性能方面的问题:
我们的DB是用的oracle 10 的RAC,AP服务器用的是weblogic 8 集群。在计算所有酒店的一天价格时,用存储过程要10多分钟。如果计算多几天的价格,则会因为存储过程时间过长,造成AP报timeout。
为了应对业务的变化(也因为有了这些变化,才敢有以下的做法),也为了解决性能问题,我决定把这些业务逻辑从DB中移出来,放在程序中去。我们用面向对象的方法进行分析和设计,用若干业务领域类以及持久化DAO代替了这些存储过程。用了大约2个人月的时间,完成上线了。 计算一天价格的时间下降到3分钟,仔细检查了一下,业务接口中有个地方可以优化。优化后,计算一天价格的时间下降到不足一分钟了,多天的价格计算也可以进行了!
总结一下这次过程:
1、存储过程处理的过程复杂时,性能未必好!
2、程序中也有很多地方是可以优化的。
3、面向对象的程序应对业务逻辑的变化,有时比存储过程还要好!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值