论坛首页 综合技术论坛

探讨用存储过程的优劣

浏览 84728 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-01-25  
glovebx 写道
houxinyou 写道
感觉楼主的系统是用了N久之前的框架,除了做页面基本不用改什么,把存储过程在配置文件中一设置就OK的那种.项目的环境也很确定,不是互联网应用,最多几百个客户端,并发也不是很多.项目不论怎么发展,客户端也基本是固定,无非就是加一个模块,增加点功能.而且说的不好听一点,很有可能是那种一锤子买卖,项目验收后基本上就啥也不管了.维护的事给钱都不一定管的不管的那种!这样的程序,界面漂亮一点,业务端和数据库只要有一处做的稍好一些就不会出性能问题.也不可能发展到楼上各位所说的那种还需要集群的程度.能把程序和数据库分到两台电脑上都是相当不错的了,多数情况下都是在一台电脑上.


我解释一下。
1、系统不是N久之前的框架,一直以来我们用的是以Spring+struts为底层扩展而来的框架,一点都不用存储过程。
2、项目环境确定,因为从技术选型到服务器安装调试一条龙都是我们决定的。
3、确实不是面向互联网的应用,所以我们的前端是flex。
4、不是一锤子买卖,是要一直维护下去的项目。项目验收后,一直在做扩展和优化。
5、tomcat和mysql分别部署的,而且还有tokyo cabinet做缓存,两台os都是centos5.5。

严格说起来,这是我们公司的产品,顺应客户的要求做定制化。


我不是很清楚你们的情况,只是说一下我自己的理解.
以我的经验,做这种项目的公司一般都是有自己固定的行业的,所以每一个项目的业务大概是相同的,当然,细节上肯定也是有所不同的.也正是因为这样,所以你们把一些可变的业务逻辑放在存储过程中.
当有下一个项目或者是客户业务需求发生变化时,应用程序部分基本不用修改,只要对存储过程的细节部分做一些修改就可以了.
这样的优点是:
修改起来容易,因为业务每次都不会发生大的变化,细节都在存储过程中,改了存储过程就可以了,不用替换应用程序部分.
这样的缺点是:
1.不利于软件产品化,正常把业务逻辑放在应用程序中时,可能整个单位只维护一套产品(这个产品指的是全部的东西,包括代码和数据库),当然,所有的功能都在这一套产品中,对于不同客户的不同细节,用一些特殊的方法(比如接口,条件等)实现,各种实现只要在配置文件中修改就可以了.而存储过程中虽然也可以做到,但存储过程不太适合放太多的那种根本用不到的业务.所以,大部分都是每个项目要单独维护一套(至少存储过程要每个客户单独维护一份).
2.绑人,如果是产品化的,大家只要了解自己产品就够了(虽然东西会比较多),当一个客户有特殊要求的时候,按开闭原则,加入一部分功能,改配置文件就成了.而每个项目单独维护一份的话,一般的情况是分给某一个人维护某几个项目.而其它人对这个项目不是很了解,一些小活很难参与.而维护项目的人会因有头事比较多,很难参与到其它项目中
以上只是个人见解,说错了请见谅
0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
lobbychmd 写道
很多人直接在数据库创建 sp,而不是用文件保存起来,就不好用 版本控制系统



天下没有这种神人(不怕老板K,不怕丢饭碗)。从这句话可以推断你大概没真正用过数据库。
0 请登录后投票
   发表时间:2011-01-25  
ironsabre 写道
to liuchuan98:
我点名了,请你告诉我为什么sp的版本控制很难搞。你用了很字。
这跟我自己的经验对不上,所以我一定要知道你们在搞什么。为什么会有这个问题出来。
我想知道这里边到底存在什么误解。


我用PL/SQL Developer写存储过程。每次修改过copy出来,上传到SVN,麻烦,而且有时候会忘记。

Java的IDE一般都集成了SVN,方便
0 请登录后投票
   发表时间:2011-01-25  
bureaucrat 写道
ironsabre 写道
to liuchuan98:
我点名了,请你告诉我为什么sp的版本控制很难搞。你用了很字。
这跟我自己的经验对不上,所以我一定要知道你们在搞什么。为什么会有这个问题出来。
我想知道这里边到底存在什么误解。


我用PL/SQL Developer写存储过程。每次修改过copy出来,上传到SVN,麻烦,而且有时候会忘记。

Java的IDE一般都集成了SVN,方便


你可以用Eclipse来管理sp的啊,你在java项目下建一个pl/sql目录,sp代码都存到那儿去,然后你用Eclipse来管理的你sp代码check out checkin不就行了啊。难道你们不是这样做?

我真的觉得你们好奇怪噢。。
0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
xiaoshan5634 写道
同意楼上的观点,存储过程对于大量数据的处理能力是非常强的。
真正使用过存储过程的人应该很清楚。
但是存储过程也会带来一个很大的问题----数据库瓶颈,这点也是使用存储过程必须考虑的一个问题。
存储过程能消耗你大量的cpu资源和内存资源,而且写的不好的存储过程会长时间占用连接,长时间等待某些资源而锁定其他的资源,从而很容易造成系统阻塞。所以存储过程尽量写的简短,少用临时表。



有些事情是不管你用什么语言写都会遇到的问题,我不明白为什么会向语言上靠。
比如“长时间占用连接,长时间等待某些资源而锁定其他的资源”这些,你用jdbc还不是一样?
这跟你的设计有关,跟用什么语言实现是无关的。
0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
ironsabre 写道
bureaucrat 写道


我用PL/SQL Developer写存储过程。每次修改过copy出来,上传到SVN,麻烦,而且有时候会忘记。

Java的IDE一般都集成了SVN,方便


你可以用Eclipse来管理sp的啊,你在java项目下建一个pl/sql目录,sp代码都存到那儿去,然后你用Eclipse来管理的你sp代码check out checkin不就行了啊。难道你们不是这样做?

我真的觉得你们好奇怪噢。。



然后咧,怎么调试呢? 请问 
0 请登录后投票
   发表时间:2011-01-25  
ray_linn 写道
lobbychmd 写道
很多人直接在数据库创建 sp,而不是用文件保存起来,就不好用 版本控制系统



天下没有这种神人(不怕老板K,不怕丢饭碗)。从这句话可以推断你大概没真正用过数据库。


代码不存下来已经很神了,但据此再推导出存储过程使用版本控制是“很”困难的。这就更神了。
0 请登录后投票
   发表时间:2011-01-25  
没看明白lz想讨论什么问题。既然觉得自己的方案很好,那就坚持做呗,还在这里讨论啥?
0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
flyaswish 写道
没看明白lz想讨论什么问题。既然觉得自己的方案很好,那就坚持做呗,还在这里讨论啥?

+1
我看过很多类似的帖子
一开始,往往是已经确定了的事,拿出来讨论
然后某个不客气的回帖往往会把帖子变成吵架帖
最后甲乙双方更加坚定自己的观点...
0 请登录后投票
   发表时间:2011-01-25  
wn_1985 写道
flyaswish 写道
没看明白lz想讨论什么问题。既然觉得自己的方案很好,那就坚持做呗,还在这里讨论啥?

+1
我看过很多类似的帖子
一开始,往往是已经确定了的事,拿出来讨论
然后某个不客气的回帖往往会把帖子变成吵架帖
最后甲乙双方更加坚定自己的观点...


好的讨论可以把事情搞清楚吧。
比如一些反sp的人他们的观点根本就不成立,通过这个讨论我想他们应该能改变他们的一些错误观点。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics