是这样; 现在做的小项目某个页面的查询数量太多 (打开页面要和数据库交互27次, 而且已经不能再少了), 那么如果100个人同时访问的话就会交互2700次; 这一点儿被告知是通不过性能测试的... 别人建议建立一个静态类, 把查询出来的东西保存在这个静态类的对象中, 然后这个对象是保存在中间件的内存中; 这样访问这个页面的时候就不和数据库交互而是从中间件读取数据; 当然中间件里保存的数据也是要定时更新的, 因为数据库的数据会不断更新么. 这个思想我明白, 但是现在就是实现的问题:1. "中间件" 指的是服务器么? 比如现在用的TomCat?
2. 从数据库中查询并加工后的结果是2个List, 然后拿到页面显示; 那么应该如果设计这个所谓的 "静态类" 呢?
3. 如何把这个静态类的对象保存到中间件? 又如何读取?
4. 服务器如果关闭的话数据会保存下来么?非常感谢!!!!

解决方案 »

  1.   

    1. "中间件" 指的是服务器么? 比如现在用的TomCat?
    对,就是你的tomcat,但不是tomcat帮你保存,
    还是要你自己写代码来保存,比如,写一个静态类,总之让别的代码能访问到,
    负责周期性从数据库更新数据,页面请求的时候(Action也好,Service也好,jsp里的代码也好,都一样),
    直接调这个类要数据就行。相当于这个类把数据库操作屏蔽了。

    2. 从数据库中查询并加工后的结果是2个List, 然后拿到页面显示; 那么应该如果设计这个所谓的 "静态类" 呢?
    因为你有两个list,所以,为了避免产生数据交错,最好定义一个类封装这两个list,
    然后再通过静态类提供访问接口和更新接口。
    更新线程一定要每次创建一个新的数据对象替换原有对象,而不要在原有对象基础上修改。
    如:
    public class DBOperator{
      static private MyData data;
      static public synchronized  MyData getData(){
      }  //这个是给定时更新的线程调用,更新数据的
      static public synchronized void updateData(){
      }
    }public class MyData{
     private List data1,data2;
      public List getData1(){
      }
      public List getData2(){
      }
    }
    3. 如何把这个静态类的对象保存到中间件? 又如何读取?
    不存在保存到中间件的问题,这句话本身有语病,不过大家都能理解。
    如果你是静态类,一旦被jvm加载,就在内存了,也就是所谓的保存在中间件了。
    4. 服务器如果关闭的话数据会保存下来么?
    不会,除非你有特殊的负责保存的逻辑。
      

  2.   

    1、介于业务逻辑和操作系统之间的软件都可以认为是中间件,Web服务器或应用服务器是典型的中间件。
    2、3、4、关于业务数据缓存
       设计缓存要考虑数据的特性:A 数据总量 B 变化频率 C 变化方式
       设计缓存的方法:A 内存 B 硬盘文件 C 前置数据库(区别于企业生产库)
       惰性数据才考虑载入内存,这类数据用定时更新机制是可行的,但是数据量不能太大;
       数据量大,但是单向持续递增的,可以生产出查询HTML页面,生成硬盘文件换查询性能;
       数据量大,但变化频繁,这类即席查询避免不了的,多用结果表,尽量减少表关联,减少数据库主机压力;