论坛首页 综合技术论坛

探讨用存储过程的优劣

浏览 84027 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-01-17  
楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。
尤其在项目中,体会更深。
如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。
0 请登录后投票
   发表时间:2011-01-17  
rox 写道
楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。
尤其在项目中,体会更深。
如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。



建议同时看一下<oralce高级编程>这本书,里面对sp讲述得很清楚。
0 请登录后投票
   发表时间:2011-01-17  
rox 写道
楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。
尤其在项目中,体会更深。
如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。



谢谢,改天拜读一遍。
同时我要说的是,我也很赞同“是否使用存储过程,应该依具体情况而定”这个说法。本项目因为时间紧所以才采用这个比较极端的方案。
0 请登录后投票
   发表时间:2011-01-17  
ray_linn 写道
rox 写道
楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。
尤其在项目中,体会更深。
如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。



建议同时看一下<oralce高级编程>这本书,里面对sp讲述得很清楚。


嗯,以前在oracle下做过sp开发,还做过proc*c,不过书还真的看不多。
改天有机会看看,谢谢推荐。
0 请登录后投票
   发表时间:2011-01-17  
ray_linn 写道
govista 写道
我的理解:
1.对于逻辑密集型的业务系统,比如上面提到的进销存,用存储过程的开发效率至少是用JAVA开发的5倍以上,至于说性能,这个和语言的关系不大,关键在对SQL语句的优化。
2.存储过程学习成本很低,新人培训3天可以直接上手,当然,前提是对业务逻辑比较熟练(话说回来,一个对业务逻辑不熟练的人,什么语言高手都不管用)。
3.一行一行敲代码的程序员们,如果要进步快点,可以多花点时间,换换脑子,多理解理解业务吧,别在这讨论这个语言那个语言的。


回看楼主:

高并发下,不知道会不会有问题。完成一个业务过程,牵涉到许多表和好几个存储过程,里面有好几处是FOR UPDATE。设计时已经考虑到死锁问题,所以对多张表的更新顺序是保持一致的。但是高并发情况下会不会有性能问题,目前还未测试。如果有谁有经验,还望不吝赐教。

----------------------

这么多不确定能证明存储过程学习成本很低么?



并没有这么多不确定,只有1个:高并发下会不会有性能问题?
因为一直没时间做并发压力测试,所以我只能持疑问态度。

个人考虑,高并发的场合,架构上要加缓存处理,同时会考虑做mysql集群,这是延伸出来的话题。如果集群方式下,数据和存储过程是分开的话(存储过程在mysql server中运行,所操作的数据是放同一个地方的话),那横向扩展应该就没有问题。
0 请登录后投票
   发表时间:2011-01-17  
产品不换,只换数据库呢? mysql 改用Oracle
0 请登录后投票
   发表时间:2011-01-17   最后修改:2011-01-17
我曾经也和.net的同事讨论过这类问题,我是觉的放在程序里好,他是觉的放在存储过程里好,,后来还发了一篇文章讨论,,,,,http://www.iteye.com/topic/734702,至今没找到准确的方案,证明哪个好,只能说在一定的基础上各有一定的用处
0 请登录后投票
   发表时间:2011-01-17  
高并发下会对热门资源形成竞争性抢占,系统中要抢占的竞争点越多性能越差。你所有的逻辑都用存储过程来执行,很明显所有压力都会集中到数据库服务器上。而这部分压力又不能通过业务逻辑中间件分摊,运行风险很大。我们一般都采用业务逻辑和数据库分开的架构方式,很少写存储过程。一般只用存储过程写关键的、需要高速执行的逻辑。
0 请登录后投票
   发表时间:2011-01-17  
govista 写道
我的理解:
1.对于逻辑密集型的业务系统,比如上面提到的进销存,用存储过程的开发效率至少是用JAVA开发的5倍以上,至于说性能,这个和语言的关系不大,关键在对SQL语句的优化。
2.存储过程学习成本很低,新人培训3天可以直接上手,当然,前提是对业务逻辑比较熟练(话说回来,一个对业务逻辑不熟练的人,什么语言高手都不管用)。
3.一行一行敲代码的程序员们,如果要进步快点,可以多花点时间,换换脑子,多理解理解业务吧,别在这讨论这个语言那个语言的。


敢问你是一次敲几行代码?
0 请登录后投票
   发表时间:2011-01-17  
glovebx 写道
sp自然不是万能的,也要分场景使用。
就我个人经验而言,如果一段业务处理放到java代码或者sp里都合适,一般我会优先考虑放到sp。

我维护过所有逻辑放在java代码里的系统,也维护过基本上主要业务处理都放在sp的系统。个人感觉,只要业务熟悉了,并没有太大的差别(只是java代码改动再发布到生产环境比较费时费力)。前提是注释要齐全,代码要规范。

说道需求变动带来的维护工作,我觉得放在sp里面,围绕维护的工作量减少了很多。
就目前进销存的维护而言,客户在各种费用的计算上有很多需求,比如会有很多种计算方式,且要根据系统设置以及客户类型,采用不同的费用计算公式。涉及到各种计算,此时sp的优势就体现出来了。

另,这个项目因为时间非常紧,而人手严重不足,所以我采用的方案,看起来比较极端--涉及到数据库的所有处理,哪怕只是对一张表的CRUD,我全部是用sp的。
这里很多人应该对这样的方案不会赞同。

全部用sp实现,在系统横向扩展上可能会很受限制。但是进销存基本上是企业内部使用的系统,所以并发数并不会非常高,基本上现有架构能支撑住。


啥?楼主是不是写错别字了,是优势体现出来了,还是劣势体现出来了?
0 请登录后投票
论坛首页 综合技术版

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