惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗
宝玉的分享
宝玉的分享
量子位
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Vercel News
Vercel News
L
LangChain Blog
B
Blog
Y
Y Combinator Blog
爱范儿
爱范儿
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - Franky
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
Scott Helme
Scott Helme
I
Intezer
T
The Exploit Database - CXSecurity.com
MyScale Blog
MyScale Blog
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Security Affairs
Cyberwarzone
Cyberwarzone
PCI Perspectives
PCI Perspectives
小众软件
小众软件
D
DataBreaches.Net
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
Forbes - Security
Forbes - Security
S
Securelist
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
The Last Watchdog
The Last Watchdog

博客园 - 小草

mac系统及xcode使用的SVN客户端安装升级 快速升级App支持iOS6及iPhone5的4寸屏幕 尝鲜安装iOS6及新特性 Delphi处理Http请求自定义Header 浅谈项目与产品的区别 xcode4.2开发最新的ios5应用,分享snow版本下载地址 xCode 4.X 免证书真机发布及调试 第一个iPhone版本应用发布 【iPhone开发】说说Xcode4中xib绑定的原理 【iPhone开发】XCode4开发iPhone应用的体验 多机多屏显示器实战 存储过程与业务类实现业务的差异比较 浅析SAAS数据模型设计(Oracle) 安装VS2010中文版初体验 QQ邮箱里可以定阅博客园的文章了 升级到NVelocity1.1版本 解决Office 2010打开文件提示“文件已损坏,无法打开。”的问题 突破电信3G宽带对网页浏览的上网限制 华为EC1261使用小记
业务逻辑实现方式的讨论:存储过程 good or bad?
小草 · 2010-08-04 · via 博客园 - 小草

之前国内外都对存储过程的好与坏进行了激烈的争论,以下是一些调查与讨论的链接,有兴趣可以去了解一下:

本文将不讨论这部分内容,更重要的强调什么情况下使用存储过程,什么情况下应该封装在业务类中。

总体的原则:

1、业务逻辑需要进行复杂的判断处理使用业务类实现

2、涉及小数据量(数据行在200条以内)处理判断使用业务类实现

3、涉及批量数据处理使用存储过程实现(如部门人员批量合并,同时批量增加每个人员的岗位变更信息子表)

4、涉及统计分析部分的逻辑通过存储过程来实现

5、如果需要对外提供数据层接口的部分通过存储过程实现,不建议直接开放数据表,至少也要以视图的形式开放(这种情况很少,一般是内部系统间才会使用这种接口,建议少用)

6、需要进行横向扩展的业务使用业务类实现(如:用户认证表只是纵向扩展,只是记录的增加;企业的数量可能的增长就属于横向扩展或者说模块的数量增长也属于横向扩展,涉及数据表的增加部分)

 

当然在大多数情况下,需要具体情况具体分析,以下只是针对我目前项目情况的分析:

1、只支持Oracle数据库。即Oracle10g及以上版本的数据库。因为是做SAAS服务,所以客户不需要关心数据库,为此产品没有适应多种数据库环境的需求。

2、模块低耦合。如用户认证、注册、具体业务逻辑模块应用等进行物理上的分离,提供的数据库存储及服务都分布在不同的数据库服务器或者实例上。

3、对可扩展性要求比较高,要求可进行多种方式的扩展(如部署方面可以通过横向增加服务器的方式解决高并发的问题,业务方面要求可以适应不断增加的功能模块,以适应企业管理的需要)。

4、对可靠性要求比较高,要求可提供7*24不间断服务。

总结:

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