论坛首页 综合技术论坛

探讨用存储过程的优劣

浏览 84028 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-01-17  
qiushily2030 写道
产品不换,只换数据库呢? mysql 改用Oracle


这个在技术选型的时候就已经定了,除非极度特别的情况,否则不会换数据库。基于此才可以选用所有业务逻辑都放到sp的极端方案。
0 请登录后投票
   发表时间:2011-01-17  
wu_quanyin 写道
我曾经也和.net的同事讨论过这类问题,我是觉的放在程序里好,他是觉的放在存储过程里好,,后来还发了一篇文章讨论,,,,,http://www.iteye.com/topic/734702,至今没找到准确的方案,证明哪个好,只能说在一定的基础上各有一定的用处


看综合因素了,不同的场景,用不同的架构。
我们这个项目时间很紧的情况下,采用这种方案的。
0 请登录后投票
   发表时间:2011-01-17  
xixixi8899 写道
高并发下会对热门资源形成竞争性抢占,系统中要抢占的竞争点越多性能越差。你所有的逻辑都用存储过程来执行,很明显所有压力都会集中到数据库服务器上。而这部分压力又不能通过业务逻辑中间件分摊,运行风险很大。我们一般都采用业务逻辑和数据库分开的架构方式,很少写存储过程。一般只用存储过程写关键的、需要高速执行的逻辑。


事实上,即便把业务逻辑放在java端,最终所有的压力都会集中到数据库。
如果mysql集群,存储过程和实际数据是分开的话,通过横向扩展,同样可以分摊单个数据库压力过高的问题。
本人没有研究过mysql集群,所以可能会有错误理解,有谁能解释一下mysql集群吗?
0 请登录后投票
   发表时间:2011-01-17  
akandfxs 写道
hehe,我敢打赌这里反对的人都没有用楼主介绍的架构开发过项目。这种架构从头到脚都是动态的,节约的时间不止一星半点,而且从前台到后台都可以灵活的调配人力资源,对于小型团队,每个人从前到后都懂一点,这种架构的开发速度就体现出来了。
我曾经用类似的架构做过商业模拟游戏,局域网对战的那种。这种架构对于中小型项目,局域网内项目是开发利器,尤其对于游戏这种经常修改的显示逻辑。不过确实可维护性差点。但说真的,用mysql写存储过程绝对没有那么的复杂。几种套路也相对容易学会,当然,对人的要求还是稍微高点。
项目开发还是从整体考虑比较好,不是什么时候可维护性都排在第一的。另外,这种存储过程的可维护性差,维护成本高,但有多少这种类型的项目的是需要很多维护工作的呢?



你说的很对,这个架构,从头到脚都是动态的,确实是这样。
另外还有一点,我们这个系统,前端flex编写的富客户端,所以页面跳转逻辑等所有数据运算逻辑之外的代码,都在客户端实现,客观上减低了java在此系统里的所占的权重。

用mysql写存储过程确实没那么复杂,做过的人应该能了解。
另外,维护是否容易,也许跟采用的语言有关,但是更重要的是编码是否规范,注释是否充分准确,资料是否齐全。甚至,维护的人对业务是否已经很了解。
0 请登录后投票
   发表时间:2011-01-17  
akandfxs 写道
当然,这种架构对人的要求需要注意一些,尤其是后端存储过程这方面,表的数量和存储过程的命名规范和整理需要注意。这些如果注意的好,维护还是会省一些事情的。当然前后台接口定义也是如此。最好都一目了然。
我觉得最大的好处是几个水平差不多的人前后台互相支援,基本没什么等待磨洋工的时间。如果一个团队能比较稳定,做同一类型的项目应该非常快的,动态定制的适应能力非常强。


这点你说的很对,各种命名规范和编码规范是很重要的,否则会乱成一团糟。
0 请登录后投票
   发表时间:2011-01-17  
liulanghan110 写道
我刚开始工作,只参与过现在这个系统,是JSP页面+STRUTS控制转向+DB2存储过程实现业务逻辑。平时大多数工作就是在写存储过程和改存储过程。系统在在删除、插入操作时,人一多,经常会出现死锁。另外,DB2存储过程调试很不方便,还有,写的好和写的不好的存储过程,可能一个只需要1分钟得到结果,一个需要5分钟得要结果。
最痛苦的就是改别人的存储过程了,特别是那种经过了几个人修改过的存储过程,简直是悲剧。。。

我感觉,一个运行超过三年的系统,去维护它的存储过程,简直是个悲剧。


如果说,人一多就会出现死锁,那说明是你们系统有BUG,而不是采用存储过程的原因。
比如说有多个地方用相反的顺序在更新一系列表的时候,就极容易死锁,你们该从这方面找原因。

我们系统运行到现在,死锁从来没发生过。
另外,无论是sp,还是java,如果编码不注意,极容易产生耗性能的代码。比如几百次循环用“+”号拼接字符串,这种问题程序员自己测试的时候很容易被忽略。

无论是编码,还是维护,一定的规范和完整的注释是必要的。
0 请登录后投票
   发表时间:2011-01-17  
为什么一提到项目,产品 所有人的第一反应就是 增删改查?
0 请登录后投票
   发表时间:2011-01-18  
glovebx 写道
liulanghan110 写道
我刚开始工作,只参与过现在这个系统,是JSP页面+STRUTS控制转向+DB2存储过程实现业务逻辑。平时大多数工作就是在写存储过程和改存储过程。系统在在删除、插入操作时,人一多,经常会出现死锁。另外,DB2存储过程调试很不方便,还有,写的好和写的不好的存储过程,可能一个只需要1分钟得到结果,一个需要5分钟得要结果。
最痛苦的就是改别人的存储过程了,特别是那种经过了几个人修改过的存储过程,简直是悲剧。。。

我感觉,一个运行超过三年的系统,去维护它的存储过程,简直是个悲剧。


如果说,人一多就会出现死锁,那说明是你们系统有BUG,而不是采用存储过程的原因。
比如说有多个地方用相反的顺序在更新一系列表的时候,就极容易死锁,你们该从这方面找原因。

我们系统运行到现在,死锁从来没发生过。
另外,无论是sp,还是java,如果编码不注意,极容易产生耗性能的代码。比如几百次循环用“+”号拼接字符串,这种问题程序员自己测试的时候很容易被忽略。

无论是编码,还是维护,一定的规范和完整的注释是必要的。


主要是没有规范的注释啊,一个两千行的代码,看不到一句注释的感觉并不好。而且。。。甚至有些表都没注释,所以悲剧
0 请登录后投票
   发表时间:2011-01-18  
我见过一个新手写SP,用游标来遍历表,然后一条条数据来判断有某个值是否存在这个表里。。。。

个人认为储存过程是要非常熟悉数据库底层的,一些很细节的技术问题菜鸟完全搞不定。我见过最典型的是一个隐式类型转换,表里字段明明是数字,但有些新手就偏偏在where条件里写的是这个字段等于一个字符串。这个问题造成了很多问题。

楼主,祝你好运~~
0 请登录后投票
   发表时间:2011-01-18  
LSQ6063 写道
把业务逻辑转化到DB上,不太同意!

嗯,其实可以用这句话做为一个总结
0 请登录后投票
论坛首页 综合技术版

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