锁定老帖子 主题:探讨用存储过程的优劣
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-17
楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。 尤其在项目中,体会更深。 如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。 |
|
返回顶楼 | |
发表时间:2011-01-17
rox 写道 楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。 尤其在项目中,体会更深。 如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。 建议同时看一下<oralce高级编程>这本书,里面对sp讲述得很清楚。 |
|
返回顶楼 | |
发表时间:2011-01-17
rox 写道 楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。 尤其在项目中,体会更深。 如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。 谢谢,改天拜读一遍。 同时我要说的是,我也很赞同“是否使用存储过程,应该依具体情况而定”这个说法。本项目因为时间紧所以才采用这个比较极端的方案。 |
|
返回顶楼 | |
发表时间:2011-01-17
ray_linn 写道 rox 写道 楼主可以买本Martin Fowler的《企业应用架构模式》仔细阅读一下。
和网友们说的类似,是否使用存储过程,应该依具体情况而定,但这本书讲的更全面和系统。 尤其在项目中,体会更深。 如果继续打算做java或.net开发,这本书必备。另外Martin Fowler其他的书也非常不错。 建议同时看一下<oralce高级编程>这本书,里面对sp讲述得很清楚。 嗯,以前在oracle下做过sp开发,还做过proc*c,不过书还真的看不多。 改天有机会看看,谢谢推荐。 |
|
返回顶楼 | |
发表时间:2011-01-17
ray_linn 写道 govista 写道 我的理解:
1.对于逻辑密集型的业务系统,比如上面提到的进销存,用存储过程的开发效率至少是用JAVA开发的5倍以上,至于说性能,这个和语言的关系不大,关键在对SQL语句的优化。 2.存储过程学习成本很低,新人培训3天可以直接上手,当然,前提是对业务逻辑比较熟练(话说回来,一个对业务逻辑不熟练的人,什么语言高手都不管用)。 3.一行一行敲代码的程序员们,如果要进步快点,可以多花点时间,换换脑子,多理解理解业务吧,别在这讨论这个语言那个语言的。 回看楼主: 高并发下,不知道会不会有问题。完成一个业务过程,牵涉到许多表和好几个存储过程,里面有好几处是FOR UPDATE。设计时已经考虑到死锁问题,所以对多张表的更新顺序是保持一致的。但是高并发情况下会不会有性能问题,目前还未测试。如果有谁有经验,还望不吝赐教。 ---------------------- 这么多不确定能证明存储过程学习成本很低么? 并没有这么多不确定,只有1个:高并发下会不会有性能问题? 因为一直没时间做并发压力测试,所以我只能持疑问态度。 个人考虑,高并发的场合,架构上要加缓存处理,同时会考虑做mysql集群,这是延伸出来的话题。如果集群方式下,数据和存储过程是分开的话(存储过程在mysql server中运行,所操作的数据是放同一个地方的话),那横向扩展应该就没有问题。 |
|
返回顶楼 | |
发表时间:2011-01-17
产品不换,只换数据库呢? mysql 改用Oracle
|
|
返回顶楼 | |
发表时间:2011-01-17
最后修改:2011-01-17
我曾经也和.net的同事讨论过这类问题,我是觉的放在程序里好,他是觉的放在存储过程里好,,后来还发了一篇文章讨论,,,,,http://www.iteye.com/topic/734702,至今没找到准确的方案,证明哪个好,只能说在一定的基础上各有一定的用处
|
|
返回顶楼 | |
发表时间:2011-01-17
高并发下会对热门资源形成竞争性抢占,系统中要抢占的竞争点越多性能越差。你所有的逻辑都用存储过程来执行,很明显所有压力都会集中到数据库服务器上。而这部分压力又不能通过业务逻辑中间件分摊,运行风险很大。我们一般都采用业务逻辑和数据库分开的架构方式,很少写存储过程。一般只用存储过程写关键的、需要高速执行的逻辑。
|
|
返回顶楼 | |
发表时间:2011-01-17
govista 写道 我的理解:
1.对于逻辑密集型的业务系统,比如上面提到的进销存,用存储过程的开发效率至少是用JAVA开发的5倍以上,至于说性能,这个和语言的关系不大,关键在对SQL语句的优化。 2.存储过程学习成本很低,新人培训3天可以直接上手,当然,前提是对业务逻辑比较熟练(话说回来,一个对业务逻辑不熟练的人,什么语言高手都不管用)。 3.一行一行敲代码的程序员们,如果要进步快点,可以多花点时间,换换脑子,多理解理解业务吧,别在这讨论这个语言那个语言的。 敢问你是一次敲几行代码? |
|
返回顶楼 | |
发表时间:2011-01-17
glovebx 写道 sp自然不是万能的,也要分场景使用。
就我个人经验而言,如果一段业务处理放到java代码或者sp里都合适,一般我会优先考虑放到sp。 我维护过所有逻辑放在java代码里的系统,也维护过基本上主要业务处理都放在sp的系统。个人感觉,只要业务熟悉了,并没有太大的差别(只是java代码改动再发布到生产环境比较费时费力)。前提是注释要齐全,代码要规范。 说道需求变动带来的维护工作,我觉得放在sp里面,围绕维护的工作量减少了很多。 就目前进销存的维护而言,客户在各种费用的计算上有很多需求,比如会有很多种计算方式,且要根据系统设置以及客户类型,采用不同的费用计算公式。涉及到各种计算,此时sp的优势就体现出来了。 另,这个项目因为时间非常紧,而人手严重不足,所以我采用的方案,看起来比较极端--涉及到数据库的所有处理,哪怕只是对一张表的CRUD,我全部是用sp的。 这里很多人应该对这样的方案不会赞同。 全部用sp实现,在系统横向扩展上可能会很受限制。但是进销存基本上是企业内部使用的系统,所以并发数并不会非常高,基本上现有架构能支撑住。 啥?楼主是不是写错别字了,是优势体现出来了,还是劣势体现出来了? |
|
返回顶楼 | |