原先做法是 :页面声明业务对象。然后调用他的内务处理结果。
性能:每一个浏览客户都要创建一个对象,然后浏览结果.
最近看了很多开元项目,于是想改进我的系统:
现在做法是:类中每一个方法:加上静态关键字 这样就不用声明类对象。
我想可以提高效率。所有用户共享一个方法。(应为都是读数据)。
最后关闭数据库,在关闭方法上加一个同步关键字。(可以避免,错误关闭数据库)
== 我不知道我得想法是否正确,请大家指教。
原先做法是 :页面声明业务对象。然后调用他的内务处理结果。
性能:每一个浏览客户都要创建一个对象,然后浏览结果.
最近看了很多开元项目,于是想改进我的系统:
现在做法是:类中每一个方法:加上静态关键字 这样就不用声明类对象。
我想可以提高效率。所有用户共享一个方法。(应为都是读数据)。
最后关闭数据库,在关闭方法上加一个同步关键字。(可以避免,错误关闭数据库)
== 我不知道我得想法是否正确,请大家指教。
看上去你所说的系统并不是很大规模
否则业务逻辑的处理放在jsp里不太合适
对于你所说的情况
缓存的确是非常合适的性能解决方案
而且因为只读,所以不用考虑由于改变数据而引起的数据不同步
所以最简单的就是写一个cache类,封装一个static HashMap,用来缓存读取出来的数据
另外,建立/关闭/再建立数据库连接的代价是很昂贵的,应该尽可能的减少这种操作。所以,连接池是必须的(当然大部分AppServer内置了连接池,前提是你使用jndi――这一点不敢肯定,我理解不透彻的说^_^)
不知道这么说是否能够切中问题的要害
连接池用了。。。
作一个缓存类,不太理解。。
大概想法如:
1。获取数据库资源。
2、把这些资源加入:HashMap hm=new HashMap() 中
3。页面读取 HashMap 获取楚剧输出。
问题:1。获取数据库资源,直接输出不是很快嘛。。?
你这实际就是简单的连接池吧
没必要自己写了,有很多成熟的产品
而且大部分AppServer现在都内置了可配置的连接池的
而且,我觉得你这样会有很严重的问题
比如说
你建立了一个数据库连接,然后把它扔到HashMap里
在jsp中,取出数据库连接进行查询,查询完成后也不释放
是这样吧?
如果是这样的
那多个用户。即多个线程同时访问你的Context怎么办
WebApp一定要是多线程的
哈希表当中只是数据库中获取的数据。并没有存在连接。连接在放入哈希表中时就已经关掉了。。。
我想以上面我说的那种方式去做,我想性能会有一定的提高。
我始终认为代码不仅仅是写给自己用的,更多的时候是写给别人用的。很可能在某个时候,就会有程序员需要修改你的程序(也许这会是你自己),这时,你当初对代码的控制就会显得很重要。 不知道你是否能够体会。 我们写代码,有时是要定义很明确的接口与方法,别的程序员只能通过这些方法来访问系统,每个方法都有一段解释,解释该方法应该在什么样的情况下调用,怎么调用等。 如果这样的控制做得好,原有的系统设计就会保持得比较好,否则经过一两次修改,原有的系统将越来越难以维护。
==============================================================
[*] cache 实际上只是一块内存,使用 Hashtable 也好,使用 List 也好,又或者其它的数据结构,都无所谓,只要能很好的描述与保存业务数据就行。
[*] 连接池只是用来缓存数据库链接的,它并不能缓存数据。
[*] PoolMan 是很有名的数据库连接池实现,在 Poolman 里有实现数据的 cache. 它的原理就是对每个 select 语句的结果进行缓存,只要 select 语句一样,返回的结果集 ResultSet 就一样。因为 PoolMan 自己实现了 JDBC API, 所以,它可以很方便地做到这一点。这只是在 JDBC 驱动一层做 cache 的应用,你也可以在应用不同层次上按需求做 cache. 只要懂清楚 cache 就是牺牲内存换取数据。它只是一块内存而已。