论坛首页 综合技术论坛

探讨用存储过程的优劣

浏览 84569 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-01-19  
glovebx 写道

问题是作为一个产品,考虑成本等各种因素还是采用MySQL。Linux/MySQL/Tokyo Cabinet,性能还行。
显然python、Ruby等开发效率更快,奈何没有这个人手啊,完全没时间学习。

你用MYSQL并不一定节省成本,要看你的运营模式,这点你要仔细看看MySQL的许可说明,一般来说你是要掏钱的

glovebx 写道

忘了说了,我们前端是Flex,所以在传统mvc架构中本应该在java端(controller)的处理逻辑(比如页面跳转等)都交给了前端,所以现在java端的代码非常简单。


业务逻辑分布在了数据库和表现层,你的单元测试肯定很难做。
0 请登录后投票
   发表时间:2011-01-19  
sunliao_first 写道
flex的速度远比不上html,html的前端效果现在做得也是不错的


就这个话题来说,还是技术选型的问题。
事实上,我们以前做过足浴系统的管理软件,你都无法相信里面的js代码有多长,有多难维护。而且为了压缩页面文件大小,注释非常稀少,一有改动就很耗精力和时间。

作为进销存这样的系统,flex要比html适合很多。效果如何并不非常重要,界面操作性、软件易用性以及可维护性,html都是比不上flex。
0 请登录后投票
   发表时间:2011-01-19  
BigBlue 写道
glovebx 写道

问题是作为一个产品,考虑成本等各种因素还是采用MySQL。Linux/MySQL/Tokyo Cabinet,性能还行。
显然python、Ruby等开发效率更快,奈何没有这个人手啊,完全没时间学习。

你用MYSQL并不一定节省成本,要看你的运营模式,这点你要仔细看看MySQL的许可说明,一般来说你是要掏钱的

glovebx 写道

忘了说了,我们前端是Flex,所以在传统mvc架构中本应该在java端(controller)的处理逻辑(比如页面跳转等)都交给了前端,所以现在java端的代码非常简单。


业务逻辑分布在了数据库和表现层,你的单元测试肯定很难做。




好吧,我承认没看过说明,一直以来都当他是免费的,至少5.5以下还是免费的吧?
自动的单元测试没做过:),白盒+黑盒测试过了,再有就是用户边用边改。
BUG不多,主要是数据计算错误--涉及的表比较多不小心就漏了,或者漏了个字段。
0 请登录后投票
   发表时间:2011-01-19  
xiaoshan5634 写道
glovebx 写道
xiaoshan5634 写道
比如说customer表,我们有一个功能使用的非常频繁,这个功能有20来个查询条件,而且还有需要使用对大字段使用like,当然like部分已经用Lucene实现了。都放入缓存中,可是需要查询customer表中的记录怎么办呢?
查询字段:客户编码,关键字1,关键字2,电话号码,邮件地址,手机号码,区号,客户地址还有很多字段为查询条件。


读写分离,为此部分查询提供只读数据。这样主系统的压力就会减小。
客户编码等这些检索字段,尽可能短,尽量固定长度(比如用char类型),建索引。Lucene不是很熟,但是我看过有人用Sphinx结合mysql做的全文搜索,看上去性能不错。

开会了,回头继续探讨。

Sphinx结合mysql做全文搜索,建索引的速度比Lucene快很多,但他只支持utf-8,了对中文的支持不是很好,它还有一个弊端就是一定要跟mysql结合使用,现在我们使用db4o+Lucene,而主数据库用sql server。Sphinx一定要结合mysql,所以要换的话还是由点麻烦的。


你们是sql server,那就没办法了。
换数据库也不现实。

这么多条件的查询,有没有什么好的缓存解决方案?谁有过经验的给介绍介绍
0 请登录后投票
   发表时间:2011-01-19  
ray_linn 写道
存储过程的缺点就是对开发人员要求比较高,---你们家就叫菜鸟上?那堪虑啊

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


回看楼主:

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

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

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


难道你这些FOR UPDATE,你换成Java就不再需要了吗?要锁的表,用哪种方法还是要锁的……
0 请登录后投票
   发表时间:2011-01-19  
glovebx 写道
BigBlue 写道
glovebx 写道

问题是作为一个产品,考虑成本等各种因素还是采用MySQL。Linux/MySQL/Tokyo Cabinet,性能还行。
显然python、Ruby等开发效率更快,奈何没有这个人手啊,完全没时间学习。

你用MYSQL并不一定节省成本,要看你的运营模式,这点你要仔细看看MySQL的许可说明,一般来说你是要掏钱的

glovebx 写道

忘了说了,我们前端是Flex,所以在传统mvc架构中本应该在java端(controller)的处理逻辑(比如页面跳转等)都交给了前端,所以现在java端的代码非常简单。


业务逻辑分布在了数据库和表现层,你的单元测试肯定很难做。




好吧,我承认没看过说明,一直以来都当他是免费的,至少5.5以下还是免费的吧?
自动的单元测试没做过:),白盒+黑盒测试过了,再有就是用户边用边改。
BUG不多,主要是数据计算错误--涉及的表比较多不小心就漏了,或者漏了个字段。


貌似MySQL商用是要收钱的——很早以前就是。
0 请登录后投票
   发表时间:2011-01-19  
liulanghan110 写道
我刚开始工作,只参与过现在这个系统,是JSP页面+STRUTS控制转向+DB2存储过程实现业务逻辑。平时大多数工作就是在写存储过程和改存储过程。系统在在删除、插入操作时,人一多,经常会出现死锁。另外,DB2存储过程调试很不方便,还有,写的好和写的不好的存储过程,可能一个只需要1分钟得到结果,一个需要5分钟得要结果。
最痛苦的就是改别人的存储过程了,特别是那种经过了几个人修改过的存储过程,简直是悲剧。。。

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


(1)死锁,跟是否用存储过程问题不大吧?两者应该没有必然的关系。
(2)其实修改次数一多,没有统一coding标准,没有重构,其实无论是SP还是Java还是.net,一样是一件很烦的事情,一样悲剧。
0 请登录后投票
   发表时间:2011-01-19  
glovebx 写道
BigBlue 写道
glovebx 写道

问题是作为一个产品,考虑成本等各种因素还是采用MySQL。Linux/MySQL/Tokyo Cabinet,性能还行。
显然python、Ruby等开发效率更快,奈何没有这个人手啊,完全没时间学习。

你用MYSQL并不一定节省成本,要看你的运营模式,这点你要仔细看看MySQL的许可说明,一般来说你是要掏钱的

glovebx 写道

忘了说了,我们前端是Flex,所以在传统mvc架构中本应该在java端(controller)的处理逻辑(比如页面跳转等)都交给了前端,所以现在java端的代码非常简单。


业务逻辑分布在了数据库和表现层,你的单元测试肯定很难做。




好吧,我承认没看过说明,一直以来都当他是免费的,至少5.5以下还是免费的吧?
自动的单元测试没做过:),白盒+黑盒测试过了,再有就是用户边用边改。
BUG不多,主要是数据计算错误--涉及的表比较多不小心就漏了,或者漏了个字段。


不能自动单元实测,那么就不能说它测试方便。BUG虽然不多(不知道这个不多是什么概念),但是计算不是漏表就是漏字段的,这表明BUG的等级较高,也许数量不多,但是严重程度很大。而在开发的调试和测试中未能及时发现这些BUG,我不知道为什么说调试很方便。


0 请登录后投票
   发表时间:2011-01-19  
showtime520 写道
我见过一个新手写SP,用游标来遍历表,然后一条条数据来判断有某个值是否存在这个表里。。。。

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

楼主,祝你好运~~


难道这个新手换用java,就不会再一个个select出来比较?
0 请登录后投票
论坛首页 综合技术版

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