MyException - 我的异常网
当前位置:我的异常网» Java相关 » [讨论]为了效率,应该把基础运算交给数据库还是程序?

[讨论]为了效率,应该把基础运算交给数据库还是程序?解决思路(2)

www.MyException.Cn  网友分享于:2015-08-26  浏览:67次

查询条件的运算,比如where to_number(a)=5,最好别用,因为有可能这个字段上有索引,但是用上函数之后,索引失效,结果是灾难,除非用函数索引

还有一些逻辑判断的,比如主键重复,这种完全可以在数据库中控制,就不用程序去判断了,只需要去获取数据库的错误异常

再说一下题外话

有两种极端论者:
1 纯java:杜绝用存储过程,为了实现通用性和跨平台性
2 纯数据库:所有数据库交互都应该用数据库来实现,为了实现速度、性能和解决问题

以上两者都是极端表现,只需要恰当使用即可(其实这是废话):

如果一个报表涉及到一堆表,对于每个表的查询、关联相当繁琐,那么就可以考虑用数据库(存储过程)去做;相反如果一条简单的sql就能实现的查询,还用存储过程,那真是画蛇添足

涉及到多个子查询,而且获取的数据量很大,比如从百万以上的表中获取数据,那就应该用存储过程。毕竟特定数据库都可以进行优化设置,而且减少了io的消耗,这种情况明显是用存储过程;如果用java的话,那简直就是灾难

------解决方案--------------------
分两种情况:
如果是B/S结构,由于网站一般采用三层结构,网页也不能承载太多记录的显示,基本上数据库就起到存储数据和简单计算的作用,取出的数据在程序里实现面向对象,复杂的业务逻辑,这对三层结构的网站开发来说是比较适用的,所以对B/S结构,计算偏重于程序实现。
如果是C/S结构,而且涉及到的数据非常大,比如有很多表,每个表的数据达到百万级别,常常需要从这些数据中招到符合复杂条件的记录,这时大部分的计算只能放到数据库了。为什么?用ado.net也能做么,把需要的数据取到缓存,然后在缓存里搜索符合条件的数据?基本上很难有这样的缓存来承载这些数据。所以对于数据量非常大的C/S程序,计算偏重于数据库实现。
------解决方案--------------------
简单数据处理逻辑可以放到数据库去实现, 而复杂的业务计算和处理,建议在程序里面处理.
------解决方案--------------------
看情况的~~
看你公司人员呀,资源呀,等综合考虑吧!
如果这个算法数据库和程序都能搞。
取效率、用数据库(一般用存储过程或触发器,费服务器资源,维护麻烦,移植性差)
取安全、易用用程序(要与数据库交互,大数据量效率低)
------解决方案--------------------
看需求来定,过多的东西拿给数据库处理也不是什么好办法,都那个程序处理也不什么好办法,我觉得还是看需求平均分配,利用好计算机的性能,才能发挥出数据库和程序的能力。
------解决方案--------------------
呵呵 程序是最主要的,不要什么都给数据库处理
------解决方案--------------------
计算(运算)由程序处理,数据的存储交给数据库.
------解决方案--------------------
探讨
能够交给数据库的最好交给数据库,比如事务处理。代码只负责组装输入数据(含数据提取、必要的验证、重组,如上面哥们说的短信拆分)和输出(含用户界面、显示、工作流),中间过程程序不要介入。
优点:1)怎么说数据库都比自己开发的程序更安全、更高效、更稳定(相信没有几个敢不服这个的)
      2)有利于系统模块开发、移植和升级。代码和数据库各自关注自己的重点,数据库提供接口给代码即可。耦合度很小
     
     

------解决方案--------------------
数据库=程序+数据源
------解决方案--------------------
能不交给数据库 就尽量不要让数据库参与不必要的逻辑运算。
应用的扩展要比数据库的扩展容易的多。应用集群上万台都很容易,但是数据库要集群成本可以很高的。

一天 1亿pv 如果把这个pv成生的 数据库操作,就简单的select 可能都会把数据库搞垮了。
但是应用可以 用1000台分摊一下很容易。


------解决方案--------------------
要综合利用资源,但也要考虑后天系统的可维护性,有些运算如果一味的依靠程序的话,显然数据库(仓库或挖掘)的功效没有发挥;同时程序过大会导致实时访问比较差,试想大家喜欢一点就出结果还是等5、6秒甚至老半天再出结果的好;当然这里又马上出现和数据库数据量的关系,如果程序健壮,那么时长显然和数据量及数据开发有关;这么说来,似乎是没什么定则的,但是从整体上来说,我们应当考虑后期维护,不要让一方很轻一方很重,而且强耦合,这样会很麻烦的!Java开发的那些框架是程序开发的很好的例子,何尝不借鉴一下呢?
------解决方案--------------------
楼主之前的实验不是已经说明问题了么. 数据库服务器算是200条,客户端程序算是400条,
我倒是觉得楼主最后得出的结论才叫不合理了, 虽说很多客户做项目确实很大方,那要是真碰上个不大方的你又能咋办? 
既然楼主的题目就是问效率,那就应该回到程序效率上来,因为程序效率是开发者能控制的,而用户实际的硬件平台则不是开发者能控制的.
------解决方案--------------------
3l学习了~
 我在做一个类似 数据监视的程序。
就是根据提供的地址或者某人的ID,放爬虫爬网页数据,然后 分析网页内容。然后项目组大家在讨论的时候就 有不同意见 这个处理该放哪儿好。
------解决方案--------------------
恩,不错,阅读过。
还是基础的就数据库自己处理,复杂的程序处理吧。
------解决方案--------------------
也是菜鸟说说自己的一点想法。
我是刚工作一年的新手,记得去年刚毕业那会公司的一个项目中有一个小需求
就是在到处的Excel报表中怎家一列用来显示产品的分类路径。而数据库表中
的分类是树形的表结构是这样:
type_id,type_name,parent_id
当时我的同事对java不是特熟悉对数据库很在行就写了个sql server的存储过程.
结果区区几千条数据花了2分钟,这样的效率实在很离谱,当然有可能是我的同事
写的程序有问题。后来另一个同事把所有分类数据一次性查询出来,用java做递归
然后用poi导出excel,结果几秒钟就ok了。

后来经理规定复杂操作一律不允许用数据库去完成。后来又发生了几次因为数据库

文章评论

5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
我是如何打败拖延症的
我是如何打败拖延症的
那些争议最大的编程观点
那些争议最大的编程观点
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员必看的十大电影
程序员必看的十大电影
中美印日四国程序员比较
中美印日四国程序员比较
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
编程语言是女人
编程语言是女人
如何成为一名黑客
如何成为一名黑客
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
为什么程序员都是夜猫子
为什么程序员都是夜猫子
代码女神横空出世
代码女神横空出世
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
10个调试和排错的小建议
10个调试和排错的小建议
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
旅行,写作,编程
旅行,写作,编程
漫画:程序员的工作
漫画:程序员的工作
Java程序员必看电影
Java程序员必看电影
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
一个程序员的时间管理
一个程序员的时间管理
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员都该阅读的书
程序员都该阅读的书
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
 程序员的样子
程序员的样子
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我的丈夫是个程序员
我的丈夫是个程序员
程序员应该关注的一些事儿
程序员应该关注的一些事儿
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
鲜为人知的编程真相
鲜为人知的编程真相
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
老程序员的下场
老程序员的下场
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有