之前国内外都对存储过程的好与坏进行了激烈的争论,以下是一些调查与讨论的链接,有兴趣可以去了解一下:
http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
http://www.oreillynet.com/databases/blog/2007/03/_so_are_database_stored_proced.html
http://andrewonedegree.wordpress.com/2010/03/08/are-stored-procedures-good-or-bad-and-when-to-use-them/ (推荐)
http://www.cnblogs.com/cxd4321/archive/2008/03/21/1115881.html 
本文将不讨论这部分内容,更重要的强调什么情况下使用存储过程,什么情况下应该封装在业务类中。
总体的原则:
1、业务逻辑需要进行复杂的判断处理使用业务类实现
2、涉及小数据量(数据行在200条以内)处理判断使用业务类实现
3、涉及批量数据处理使用存储过程实现(如部门人员批量合并,同时批量增加每个人员的岗位变更信息子表)
4、涉及统计分析部分的逻辑通过存储过程来实现
5、如果需要对外提供数据层接口的部分通过存储过程实现,不建议直接开放数据表,至少也要以视图的形式开放(这种情况很少,一般是内部系统间才会使用这种接口,建议少用)
6、需要进行横向扩展的业务使用业务类实现(如:用户认证表只是纵向扩展,只是记录的增加;企业的数量可能的增长就属于横向扩展或者说模块的数量增长也属于横向扩展,涉及数据表的增加部分)
当然在大多数情况下,需要具体情况具体分析,以下只是针对我目前项目情况的分析:
1、只支持Oracle数据库。即Oracle10g及以上版本的数据库。因为是做SAAS服务,所以客户不需要关心数据库,为此产品没有适应多种数据库环境的需求。
2、模块低耦合。如用户认证、注册、具体业务逻辑模块应用等进行物理上的分离,提供的数据库存储及服务都分布在不同的数据库服务器或者实例上。
3、对可扩展性要求比较高,要求可进行多种方式的扩展(如部署方面可以通过横向增加服务器的方式解决高并发的问题,业务方面要求可以适应不断增加的功能模块,以适应企业管理的需要)。
4、对可靠性要求比较高,要求可提供7*24不间断服务。

总结:
通过Web服务器部署业务逻辑层的执行在横向扩展性能方面存在很大的优势。但在某些方面还是存在一些问题,同时也要考验开发人员的水平与代码的质量,对需求变更的适应性及响应的及时性等等方面。Oracle本身提供了一些数据库负载的解决方案,虽然我不是OracleDBA,但Oracle在数据库方面的成就还是非凡的。据我所了解的情况,发现数据库存在瓶颈的时候,除了优化一些SQL语句的执行效率之外,最先要做的就是数据库的读写分离,大大减少对IO资源的压力。在其它方面应该还有一些解决方案,至少之前在电信、电力、税务等大型应用下Oracle数据库本身并没有存在很大的问题(可能是DBA都解决掉了吧)。而在我的经验中大部分出问题的反而是程序本身,一方面是比较难快速的适应需求变更,另一方面是比较难定位问题。后者很大的原因是没有做好单元测试,造成问题定位困难,造成测试跟踪起来太麻烦。

转载于:https://www.cnblogs.com/liubiqu/archive/2010/08/04/1791841.html

业务逻辑实现方式的讨论:存储过程 good or bad?相关推荐

  1. 业务逻辑实现方式选择

    当业务逻辑相对复杂的时候,我的大脑中总会浮现出这样或者那样的解决方式,这些解决方式中有以前使用过的和未使用过的.当面对这种选择的时候,我的大脑是比較混乱的.总是想要去在開始还没有去做就抽象出一层,或者 ...

  2. MySQL:尽量不要用存储过程封装业务逻辑

    本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". ...

  3. 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

    转:减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同 本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存 ...

  4. 关于软件中“业务逻辑”的详解

    原文:http://www.uml.org.cn/zjjs/201008021.asp 内容提要 ===================前篇===================== 前言 内容提要 ...

  5. 细说业务逻辑 -- 丢失的业务逻辑层

    前言 记得几个月前,在一次北京博客园俱乐部的活动上,最后一个环节是话题自由讨论.就是提几个话题,然后大家各自加入感兴趣的话题小组,进行自由讨论.当时金色海洋同学提出了一个话题--"什么是业务 ...

  6. 业务逻辑写在存储过程好还是后端好_后端两小时,前端一星期!你只是一个写接口的工程师吗?...

    故事从一名前端工程师的呐喊开始: 我们公司做项目分配任务,一个星期的活,后端呢,两三个小时就弄完了,前端要做界面,做交互,做功能,忙活一个星期还得和设计师对 UI,和需求方对业务逻辑,最后呢,管事的还 ...

  7. DreamFacotry 第6章 将业务逻辑集成到DreamFactory API中

    DreamFacotry 第6章 将业务逻辑集成到DreamFactory API中 DreamFactory在为各种数据源(包括Microsoft SQL Server,MySQL,SFTP,AWS ...

  8. 业务逻辑应该在哪里实现更为合理呢?

    请大牛们讨论下业务逻辑应该在哪实现较为合理 1.java业务逻辑层. 2.后台存储过程. 因为本人一直都在业务逻辑层实现.但新项目中领导要求将业务写到后台存储过程,java业务逻辑层不承载业务逻辑的实 ...

  9. petshop详解之五:PetShop之业务逻辑层设计

    五 PetShop之业务逻辑层设计业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分.它的关注点主要集中在业务规则的制定.业务流程的实现等与业务需求有关的系统设计 ...

  10. m5310模组数据上传至onenet_硬核干货!基于M5310-A的NB-IoT水表通信模块软件业务逻辑分享...

    根据不同的应用场景需求,目前NB-IoT水表主要有以下几种方案: 图1 几种常见NB水表方案 接下来将从NB-IoT水表上电开机.模组初始化.入网判断.业务逻辑四个环节来详细讲述,以下业务流程仅供参考 ...

最新文章

  1. 2020年春季学期信号与系统课程作业参考答案-第十五次作业
  2. 实验2(第二章课后习题)
  3. c语言吗 程序语言,编程语言为什么从c语言开始,那有没有a语言b语言呢?
  4. where is path tag generated
  5. 使用Pytorch进行密集视频字幕
  6. Windows 11 快速体验:开始菜单居中,全系圆角设计!
  7. 6、控件样式模板和使用
  8. (原)Ubuntu14中安装GraphicsMagick
  9. 2017中国大数据技术大会12月在京召开
  10. (140)System Verilog替代交叉覆盖率
  11. 【译】Spring 4.0带来的@Conditional注解
  12. 全国计算机二级java刷题软件_你知道的计算机二级刷题软件
  13. 太极越狱重大安全后门
  14. 刚体转动的惯性张量和转动惯量的区别和联系
  15. linux打补丁教程,Linux下patch打补丁命令
  16. 2012年8月27日|第二章:编程语言概述|总结
  17. 绝对干货的Twitter搜索技巧
  18. Druid未授权访问利用
  19. 推荐 21 款博主常用 MacOS 软件
  20. 高并发点赞系统 梳理

热门文章

  1. c++中制表符怎么用_MySQL中的自增主键用完了怎么办?
  2. 火狐浏览器驱动_火狐浏览器开始支持比WebGL更简单的绘图API WebGPU
  3. vite+vue3 整合vue-router4和vuex4
  4. jenkins相关下载链接
  5. 201771010112罗松《面向对象程序设计(java)》第十周学习总结
  6. DAY18 面向对象三大特性之继承
  7. [World Final 2016] Branch Assignment
  8. UVALive 2659+HUST 1017+ZOJ 3209+FZU 1686 (DLX
  9. Android成长日记-使用ToggleButton实现灯的开关
  10. L2TP 配置实例——Client-Initiated