锁定老帖子 主题:软件设计经验谈
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-17
我先说一个。性能问题(这个网站讨能架构,幽雅的设计,新技术有很多,但从多方面讨论性能的很少,我没看见)。现面列出两个我感触很深的例子: 1,教务系统中的学生选课,在这种情况下,并发很多,到少上千,数据必须时时动态的,当学生选课时,服务器会搞得很慢,最坏情况,就是压死。 2,从历史系统中查数据,因为是历史系统,没办法该动原表结构,为了查询一些数据,要关联很多表,查询非常慢(最坏的情况,一个sql查询要几分钟,好的要几十秒,这还是经过优化的),几十个用户就跑不动了。 对以上这些问提,我们该从那些方面来考虑(从系统架构方面,设计方面,sql方面,数据库方面,还是服务器方面,,,,,还是其它),我认为,从数据库,sql等方面来解决,只能治标,不能治本,治本必须从架构方面,设计方面,如果从架构方面我们该注意一些什么问提,该如何来设计(常听高人说,必须从设计方面来解决,但从没看到谁举下实际的例子出来),希望有高手能指点一下,大家能把自已的经验供享一下,最好能有实标例子,与解决方法。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-17
网站的瓶颈往往是跟数据库的连接开销!这个最典型的!
最根本的办法是优化SQL,加服务器! |
|
返回顶楼 | |
发表时间:2007-01-17
当数据库会成为瓶径时,有两种设计级别的解决方案:
1. 以内存换速度,CACHE所有你能CACHE的数据,可以大大减少数据库的访问次数。以选课系统为例,假设共有一千门课,每门一百人,那么共有10万条数据,一条数据1K,总共不过是100M内存就全装下了。 2. 以空间换速度,表结构按运行时设计,不适合历史查询,OK, 那么多建几个表专门存放冗余的历史数据好了,这样就绝对可以保证查询速度了。 |
|
返回顶楼 | |
发表时间:2007-01-18
我建议你应该掌握更详细的性能数据,我猜测可能有几个地方(或几类)数据库操作会成为最大的瓶颈。优化他们是最有效的。
比如是否对大量的课程选择时使用了分页? 是否使用了良好配置的连接池? 数据库如果经过了良好的优化,是否可以考虑更换高性能机器或者集群? 性能不是简单的问题,但解决方法相当一致,就是先找出瓶颈,再对瓶颈进行处理。光凭猜测的做法,不是完全不可行,但也是事倍功半的。 |
|
返回顶楼 | |
发表时间:2007-01-18
注意区分一下数据存取和数据计算
|
|
返回顶楼 | |
发表时间:2007-01-18
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle 两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的, 项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。 对于以上几个兄弟的方法,提出几点不明白的, 1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题). 2,有些时候数据是从其它系统来的,不可能动别人的数据库结构, 3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。 4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。 希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。 |
|
返回顶楼 | |
发表时间:2007-01-18
76052186 写道 很高兴有人回贴,我可能没说清楚,我在补充一下
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle 两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的, 项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。 对于以上几个兄弟的方法,提出几点不明白的, 1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题). 2,有些时候数据是从其它系统来的,不可能动别人的数据库结构, 3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。 4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。 希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。 |
|
返回顶楼 | |
发表时间:2007-01-18
这确确实实是个很让人头疼得事情,
平时服务器可能根本就没什么事情 在选课期间会有非常高的并发率, 可以研究一下RowSet, 可以不需要一直与数据库保持连接,而在内存中执行 |
|
返回顶楼 | |
发表时间:2007-01-19
zuly 写道 76052186 写道 很高兴有人回贴,我可能没说清楚,我在补充一下
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle 两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的, 项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。 对于以上几个兄弟的方法,提出几点不明白的, 1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题). 2,有些时候数据是从其它系统来的,不可能动别人的数据库结构, 3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。 4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。 希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。 这个狠 关于hibernate性能,cache,cluster环境等问题论坛已经有过N个相关帖了,楼主可以细心搜索下 |
|
返回顶楼 | |
发表时间:2007-01-19
Hibernate等东西出来是为了方便我们以常规的思维写程序,也就是面向对象,但是它的长处绝对不在性能,换一句话说,要提高性能的地方,最好不要用Hibernate等。
再有,个人认为在查询历史数据的思想就是创建冗余字段,最好达到不要关联其他表,以空间换速度 |
|
返回顶楼 | |