论坛首页 Java企业应用论坛

软件设计经验谈

浏览 10098 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-17  
取这个题目,给我的感觉很沉重(跟最近心情有关,这里就不说了),做软件也有5,6年了(决不是为了炫耀,没什么能力,现在还是个程序员),也有一些体会,我感觉在实际项目中遇到很多问提,但是有没有一个好的解决方案。我希望这个贴子只是一个开始,希望有更多的人,把自已常遇到的问题提出来,把自已的解决方案提出来,在家一学习,进步。
我先说一个。性能问题(这个网站讨能架构,幽雅的设计,新技术有很多,但从多方面讨论性能的很少,我没看见)。现面列出两个我感触很深的例子:

1,教务系统中的学生选课,在这种情况下,并发很多,到少上千,数据必须时时动态的,当学生选课时,服务器会搞得很慢,最坏情况,就是压死。
2,从历史系统中查数据,因为是历史系统,没办法该动原表结构,为了查询一些数据,要关联很多表,查询非常慢(最坏的情况,一个sql查询要几分钟,好的要几十秒,这还是经过优化的),几十个用户就跑不动了。

对以上这些问提,我们该从那些方面来考虑(从系统架构方面,设计方面,sql方面,数据库方面,还是服务器方面,,,,,还是其它),我认为,从数据库,sql等方面来解决,只能治标,不能治本,治本必须从架构方面,设计方面,如果从架构方面我们该注意一些什么问提,该如何来设计(常听高人说,必须从设计方面来解决,但从没看到谁举下实际的例子出来),希望有高手能指点一下,大家能把自已的经验供享一下,最好能有实标例子,与解决方法。
   发表时间:2007-01-17  
网站的瓶颈往往是跟数据库的连接开销!这个最典型的!
最根本的办法是优化SQL,加服务器!
0 请登录后投票
   发表时间:2007-01-17  
当数据库会成为瓶径时,有两种设计级别的解决方案:
1. 以内存换速度,CACHE所有你能CACHE的数据,可以大大减少数据库的访问次数。以选课系统为例,假设共有一千门课,每门一百人,那么共有10万条数据,一条数据1K,总共不过是100M内存就全装下了。

2. 以空间换速度,表结构按运行时设计,不适合历史查询,OK,
那么多建几个表专门存放冗余的历史数据好了,这样就绝对可以保证查询速度了。
0 请登录后投票
   发表时间:2007-01-18  
我建议你应该掌握更详细的性能数据,我猜测可能有几个地方(或几类)数据库操作会成为最大的瓶颈。优化他们是最有效的。
比如是否对大量的课程选择时使用了分页?
是否使用了良好配置的连接池?
数据库如果经过了良好的优化,是否可以考虑更换高性能机器或者集群?
性能不是简单的问题,但解决方法相当一致,就是先找出瓶颈,再对瓶颈进行处理。光凭猜测的做法,不是完全不可行,但也是事倍功半的。
0 请登录后投票
   发表时间:2007-01-18  
注意区分一下数据存取和数据计算
0 请登录后投票
   发表时间:2007-01-18  
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle
两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的,
项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。

对于以上几个兄弟的方法,提出几点不明白的,
1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题).
2,有些时候数据是从其它系统来的,不可能动别人的数据库结构,
3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。
4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。
希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。
0 请登录后投票
   发表时间:2007-01-18  
76052186 写道
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle
两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的,
项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。

对于以上几个兄弟的方法,提出几点不明白的,
1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题).
2,有些时候数据是从其它系统来的,不可能动别人的数据库结构,
3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。
4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。
希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!
0 请登录后投票
   发表时间:2007-01-18  
这确确实实是个很让人头疼得事情,
平时服务器可能根本就没什么事情
在选课期间会有非常高的并发率,
可以研究一下RowSet,
可以不需要一直与数据库保持连接,而在内存中执行
0 请登录后投票
   发表时间:2007-01-19  
zuly 写道
76052186 写道
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle
两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的,
项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。

对于以上几个兄弟的方法,提出几点不明白的,
1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题).
2,有些时候数据是从其它系统来的,不可能动别人的数据库结构,
3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。
4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。
希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!

这个狠

关于hibernate性能,cache,cluster环境等问题论坛已经有过N个相关帖了,楼主可以细心搜索下
0 请登录后投票
   发表时间:2007-01-19  
Hibernate等东西出来是为了方便我们以常规的思维写程序,也就是面向对象,但是它的长处绝对不在性能,换一句话说,要提高性能的地方,最好不要用Hibernate等。
再有,个人认为在查询历史数据的思想就是创建冗余字段,最好达到不要关联其他表,以空间换速度
0 请登录后投票
论坛首页 Java企业应用版

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