论坛首页 Java企业应用论坛

把业务逻辑从存储过程中拿出来

浏览 41093 次
精华帖 (2) :: 良好帖 (2) :: 新手帖 (15) :: 隐藏帖 (5)
作者 正文
   发表时间:2008-07-25  
DB表锁机制,存储过程占用表锁的时间相对长


楼主的存储过程要锁表嘛? 占用表锁的时间相对长是什么意思?
0 请登录后投票
   发表时间:2008-07-25  
不支持使用存储过程!!!

一、存储过程不易移植(相对于java)

二、存储过程不易修改(相对于java)

三、存储过程的性能比不上java(不是特别大数据量的情况下),主要是存储过程语言不够灵活,不能灵活的使用缓存。

四、DB越简单越好,表设计时的字段只要两种类型(number,varchar),建立索引。只有简单的数据库才能获得整体的高性能。
0 请登录后投票
   发表时间:2008-07-25  
hyhongyong 写道

好吧,如果大家认为没有什么帮助,请版主删除就是了!
对不起了,耽误大家的时间了!

说明一下,我们本身不是没对数据库调过优,但因为一是没有数据库的DBA方面的专家,只能自己在存储过程中记时的方式来发现问题并改进,但效果一直不理想!
取价格的逻辑是比较复杂的(具体细节我也没说,也没有什么意思吧!)
我不是没给出自己的分析:

2、因为存储过程的技术限制,选择和归并是需要花些时间的。而程序可以优化这些过程
3、DB表锁机制,存储过程占用表锁的时间相对长
真正用过oracle做过存储过程的应该都清楚,记录的选择(从若干条件相同的记录中选择某些特殊的记录,比如价格最低的,某字段最大的)和归并都会占用不小的时间。而程序在这里是可以优化的!
而且数据是多样性的,存储过程的处理过程要考虑所有可能的数据情况,效率自然会低。而程序在特殊数据的处理上把这些分散在不同对象上。

至于DB锁的问题,可能是我没说清楚,不只是查询价格,也有要把价格查出来并更新到一个实体表中的存储过程!

大家对你的优化有不理解的地方很正常嘛!不必因为这个就泄气了。

我还是没能理解为什么“因为存储过程的技术限制,选择和归并是需要花些时间的。而程序可以优化这些过程”,为什么会选择或导致使用“DB表锁机制”?此外你说“真正用过oracle做过存储过程的应该都清楚,记录的选择(从若干条件相同的记录中选择某些特殊的记录,比如价格最低的,某字段最大的)和归并都会占用不小的时间。”,我并不认为这是一个通用的结论。

不过,如果你们的团队中缺少不错的DB开发人员,在Java层面上进行优化也是不错的选择吧!
0 请登录后投票
   发表时间:2008-07-26  
我还是很欣赏存储过程的,我原先生成1批500000条的12位随机数,要求不与表中已有的数据相重复,以前用java代码写,简直实现不了,现在改用存储过程了,只要10分钟了
0 请登录后投票
   发表时间:2008-07-26  
楼主发这个贴证明了他的勇气,至少他用自己的方式证明了把设计不好的存储过程用面向对象的观点达到了自己的效果。
技术是可以学习和锻炼的,勇气和创新才是根本。 况且存储过程的高手不一定能优化系统达到楼主想要的结果。当然如果高手能在这个例子分析存储过程和面向对象的不同优化思路让我们学习一下是最好的。不然大家都去做DBA好了:)

很少看到这种敢于表达另类思想(去证明业务逻辑放到程序比DB块的文章),而且愿意与大家共享的好人。请接受一个不是高手的程序员的谢谢。
1 请登录后投票
   发表时间:2008-07-26  
rock_li 写道
楼主发这个贴证明了他的勇气,至少他用自己的方式证明了把设计不好的存储过程用面向对象的观点达到了自己的效果。
技术是可以学习和锻炼的,勇气和创新才是根本。 况且存储过程的高手不一定能优化系统达到楼主想要的结果。当然如果高手能在这个例子分析存储过程和面向对象的不同优化思路让我们学习一下是最好的。不然大家都去做DBA好了:)

很少看到这种敢于表达另类思想(去证明业务逻辑放到程序比DB块的文章),而且愿意与大家共享的好人。请接受一个不是高手的程序员的谢谢。

勇气?逗死我了,不是有入门讨论区吗?
你是马甲吗?
没看出来你怎么把不好的存储过程用面向对象的观点达到了自己的效果,show代码看看?
另类思想?思想在什么地方,另类在哪里?
自己都说不清楚的东西不会到问答频道提问啊?浪费大家的时间
0 请登录后投票
   发表时间:2008-07-26  
CDMA1333 写道
我还是很欣赏存储过程的,我原先生成1批500000条的12位随机数,要求不与表中已有的数据相重复,以前用java代码写,简直实现不了,现在改用存储过程了,只要10分钟了


才50W的数据量,Java做怎么会这么慢呢!估计是没有设计好吧!

对于存储过程实现业务过程,我一直不赞成的!
1 浪费数据库资源
2 复杂的流程处理
3 维护问题
4 移植问题(不同数据库可能需要重写)
5 关键一点无法扩展

如果使用服务来实现(向对于Java)
1 充分利用廉价的计算资源
2 灵活的面向对象处理业务
3 维护简单
4 基本上没有问题
5 很强的扩展性

现在我们公司的新系统什么都依赖于数据库的sql来做,为了做业务加了不少的触发器,真的很担忧性能问题!(现在老实说性能问题已经出现了)

对比以前的系统现在感觉业务处理使用程序来做的优势就出现了!
0 请登录后投票
   发表时间:2008-07-26  
数据库的 trigger是影响性能的.少用trigger
0 请登录后投票
   发表时间:2008-07-26  
确实没有看出来lz怎么用java程序来优化性能的, 从而比存储过程要快。
至于提出的第一点和第二点有些模糊,没有给出具体情况;而第三点是显而易见的,又不知道lz是怎么干的。
0 请登录后投票
   发表时间:2008-07-26  
也许你没并没有真正尝试去调优存储过程吧
0 请登录后投票
论坛首页 Java企业应用版

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