对于业务逻辑放在存储过程中的情况,目前比较有市场的看法是: “不要把业务逻辑放在DB中,除非有性能问题”
日前,我却遇到另外一种情况:
首先说一下业务(简化过的):
酒店预订系统,酒店是按天计算价格的,酒店合同价格是按时间段的,后录的合同如果时间上与原来的重合,则使用后录合同的价格。
现在的问题是从酒店合同价格计算预订时间段内的价格。主要有三个步骤:
1.分割:把合同价格的时间段按天分割到每天的价格
2.选择:选择每天上比较后录的合同的价格
3.归并:按价格相同与否,将每天的价格归并成时间段
之前是用存储过程做的。(因为这样会减少网络传输),而且不是一个存储过程,因为不同的价格计算条件和方式有一些微小的差别。
很不幸,业务有变化了,这些存储过程都要改动,而且目前有了一些性能方面的问题:
我们的DB是用的oracle 10 的RAC,AP服务器用的是weblogic 8 集群。在计算所有酒店的一天价格时,用存储过程要10多分钟。如果计算多几天的价格,则会因为存储过程时间过长,造成AP报timeout。
为了应对业务的变化(也因为有了这些变化,才敢有以下的做法),也为了解决性能问题,我决定把这些业务逻辑从DB中移出来,放在程序中去。我们用面向对象的方法进行分析和设计,用若干业务领域类以及持久化DAO代替了这些存储过程。用了大约2个人月的时间,完成上线了。 计算一天价格的时间下降到3分钟,仔细检查了一下,业务接口中有个地方可以优化。优化后,计算一天价格的时间下降到不足一分钟了,多天的价格计算也可以进行了!
总结一下这次过程:
1、存储过程处理的过程复杂时,性能未必好!
2、程序中也有很多地方是可以优化的。
3、面向对象的程序应对业务逻辑的变化,有时比存储过程还要好!
分享到:
相关推荐
通过封装业务逻辑到存储过程中,可以提高代码的复用性、安全性和性能。 #### 核心需求分析 根据题目描述,我们需要实现一个报表,用于展示不同销售金额区间的销售额以及它们占总销售额的比例。具体的业务需求包括:...
.net 业务逻辑操作组件dll 仅支持存储过程.net 业务逻辑操作组件dll 仅支持存储过程.net 业务逻辑操作组件dll 仅支持存储过程.net 业务逻辑操作组件dll 仅支持存储过程.net 业务逻辑操作组件dll 仅支持存储过程.net ...
在软件开发过程中,业务逻辑通常位于用户界面和数据存储之间,起着桥梁的作用。 ### 业务逻辑的重要性 在软件开发中,业务逻辑至关重要,因为它直接关系到应用程序能否满足业务需求。一个良好的业务逻辑设计不仅能...
在软件开发的过程中,“业务逻辑”是一个核心概念,它直接关联着软件产品的功能实现与价值传递。然而,对于许多开发者来说,业务逻辑的概念常常显得模糊不清。本文旨在通过深入探讨,帮助读者理解和把握业务逻辑的...
存储过程支持事务处理机制,可以在同一个存储过程中同时对主从表进行数据维护和有效性验证,便于实现数据的一致性和完整性。 ### 存储过程的移植性和修改 使用存储过程封装业务逻辑会限制应用程序的可移植性。一旦...
在进销存系统这样的业务逻辑中,存储过程扮演着至关重要的角色,它们能够高效、安全地处理大量的数据操作,提高系统的性能。 在进销存系统中,【工作任务】可能包括审核入库单、出库单等业务流程。存储过程可以帮助...
.net 业务逻辑操作组件dll 仅支持存储过程 支持多数据操作.net 业务逻辑操作组件dll 仅支持存储过程 支持多数据操作.net 业务逻辑操作组件dll 仅支持存储过程 支持多数据操作
MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL 5.0 中,存储过程的...
三层架构是一种常见的软件开发模式,旨在提高系统的可维护性、可扩展性和可重用性。...在实际开发过程中,可能还需要结合其他设计模式和最佳实践,如依赖注入、单元测试和持续集成,以确保代码的质量和可维护性。
本文将详细介绍如何在UAP报表中调用存储过程,实现业务逻辑的自动化。 一、建立基础数据 在开始调用存储过程之前,需要建立基础数据,包括存货档案、BOM和仓库等。存货档案是指存货的基本信息,包括存货名称、规格...
4. 存储过程:在业务逻辑层调用存储过程是常见的做法,但也有人主张将逻辑移到应用程序代码中以提高可维护性。 业务逻辑的架构模式主要有以下几种: 1. Transaction Script:将每个业务操作视为独立的事务脚本,...
总结,存储过程是数据库管理中的重要工具,它通过封装复杂的SQL操作和业务逻辑,提高了代码的可维护性和性能。理解并熟练运用存储过程,对于数据库设计和开发人员来说至关重要。通过不断实践和学习,我们可以更好地...
Oracle 存储过程是 Oracle 数据库中的一种程序单元,能够完成复杂的业务逻辑和数据操作。Oracle 存储过程的基础知识包括了解 Oracle 存储过程的基本语法、数据类型、变量声明、控制语句、循环语句、异常处理等方面的...
在这个场景中,我们关注的是一个名为"银行转账存储过程"的特定应用,它是针对银行转账业务逻辑的实现。这个存储过程主要用于模拟银行账户之间的转账操作,并包含了登录验证、转账处理以及事务管理等关键功能。 首先...
其次,复杂业务逻辑的封装。存储过程允许开发者封装多条SQL语句和事务管理,这对于处理复杂的数据库操作是很有帮助的。但当这些操作过于庞大或设计不佳时,可能导致执行效率下降。例如,一个存储过程内部的嵌套查询...
Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行某些操作,并返回结果。在...
DB2 存储过程是指在 DB2 服务器端编写、执行的程序单元,可以实现业务逻辑、数据处理和事务控制等功能。存储过程是一种特殊的数据库对象,能够接受输入参数、执行复杂的业务逻辑、返回结果集等。 存储过程的基本...
- **错误处理**:在编写存储过程中,应考虑异常处理逻辑,以便更好地处理可能出现的错误。 - **性能优化**:合理设计存储过程的结构和逻辑,避免不必要的数据加载和处理,以提高执行效率。 #### 七、总结 通过本文...