免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1265 | 回复: 0
打印 上一主题 下一主题

关于B/S结构的效率的讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-13 16:08 |只看该作者 |倒序浏览
引用

典型的把B/S结构做成了C/S结构, 而且比真真的C/S结构效率低下是肯定的.

B/S结构怎么能和C/S结构比较呢??? 让我们来比较这样作两者的结构把

这种B/S结构其实就是Browers--->Java(JSP+Java Bean+JDBC)--->DB的结构, 而其中肯定没有加诸如缓存等等增强性能的设计. 在这种情况下其实和C/S结构通过ODBC或者其他直接访问数据库是没有任何区别的.

在用B/S结构做过几个中型企业信息话项目(白天平均在线人数80左右),刚开始我们也是这样设计的, 效率的确成问题, 还好因为我的设计中使用了DAO和VO模式, 所以在第一个项目的后期在DAO统一加入了缓存, 这才提高了大部分的效率, 让整个项目通过了验收. 如果这个项目没有使用DAO/VO模式, 估计肯定死掉.

通过这几个项目对于B/S结构的效率, 我有一些体会
1.提高效率的基础 (没有基础, 谈不上优化效率, 只不过是小打小闹)
首先是技术构架要合理, 如果技术构架不合理, 那么就很难找到提高效率的地方和方式. 至于上面那种结构,几乎没有技术构架可言.如果技术构架不合理, 不管你如何优化自己的程序都是不可能的大幅度的提高效率的.
其次是数据库设计, 这是另外一个重要的方面, 在数据库设计需要考虑本身的效率和功能实现时的效率, 而且希望能以简单为主,比如说表之间的关联关系等等. 大家都应该知道同样的数据量下, 5个表的关联查询比3个表的要慢(只是一个例子). 在我开发的一个项目中, 给遇见过因为数据库设计不好导致效率低下, 不论我怎么优化程序都无济于事, 随后重新设计了数据库结构, 简化了设计. 在其中我们还有一个很极端的做法, 一些常用数据时重复的, 比如说一个表关联了用户表, 那么在这张表里出了有ID字段, 还有用户姓名的字段.
关于B/S结构下的数据库还有一个问题就是java开发人员不注意SQL语句,而且不管自己的SQL语句效率如何,只要数据正确,这是一个大问题,在我原来(我现在失业了^_^)项目小组中,就有这样的人, 因为一个SQL语句导致整个系统崩溃也是发生过的. 所以建议所有的java程序员补一补数据库的知识, 特别是数据库设计和SQL语句.
如果说上面还不能解决问题, 那么就必须考虑对数据库进行专门的优化或者数据库集群.
最后是程序员个人的编程能力.

2.提高B/S结构效率的总体方向
最主要的方向是平衡 App Server和DB Server的运行压力.
不知道有多少B/S结构在开始的时候比较过App Server和DB Server占用的系统资源, 可以试着把两者分开放到两个服务其上, 在上面提到的jsp+javabeans 两层结构中, 你肯定可以发现, App Server其实很轻闲, 而DB Server却很忙. 当然如果在这种结构下,如果反问次数不多, 却发现App Server系统资源占用率很高的话, 哪不用说, 肯定是系统结构不合理或者就是程序效率低下.
我作过这个比较, 在大量人员访问的情况下, 一般DB Server几乎满负荷运转, 而App Server去没有使用太多的系统资源.
所以如何平衡两者之间, 真真的把App Server利用起来是主要方向, 这样才能体现出App Server的优势.

在平衡了两者之间的运行压力以后, 如果还出现了大的效率问题, 那么只能使用提高硬件, 使用集群等等方式来提高效率了.

3.很好利用App Server的几种方法(以为实践的java技术有限,所以只能提出这几种, 希望各位高手能在提供一些)
(Connection pool等等常用的就不提了)
a. 缓存, 这是必不可少的, 把一些常用的数据从数据库中提取出来, 然后放在缓存中,这样可以减少访问数据库的次数, 加快读取速度. 我在具体实践是使用的是DAO模式和Hibernate, 使用hibernate的缓存机制对常用单条记录进行缓存, 使用jcs, 自己写程序, 对常用的数据列表(比如人员列表)作缓存
b. 静态页面, 在实际工作中, 有些数据长时间是不会发生改变, 这种情况下我就会考虑把这些数据存储为静态页面.本来是打算存储为XML文件的, 但是一直没有时间作
c. JMS 把一些同步处理改为异步处理, 加快反应速度, 把一些处理放到App Server空闲时来运行.


关于EJB, 在使用hibernate以后我基本上不再使用EJB, 因为不管是对开发人员的培训和高效的使用我都没有把握. 因为我自己对ejb就不是很精通, 至于它好与不好, 我没有太大的感觉. 也不想去讨论.


通过我自己的一些总结,希望大家能就如果增强B/S的效率展开讨论.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP