为了提高性能,让服务器一启动时就把数据库的数据一次加载到内存“有点像内存数据库”(本人已通过数组和hashmap实现),我已实现了在java web条件下通过一个jsp页面插入一条记录,另一个jsp页面把它读出来,但是通过一个jsp页面插入一条记录再通过java application就读不到这条记录,我估计是java应用程序服务器跟web程序服务器的差别,它们是独立的两个进程。公司原来有一个java application和一个web 程序,要是都改成web形式那成本很高,望大虾们能提供一个可用的解决方案,能让这两个不同方式系统可共用同一个内存。或是提供其它可用的解决方案。

解决方案 »

  1.   

    我感觉“共用同一个内存”的主意就别想了,好像不能实现。不同的应用之间是不能共享内存的。
    我感觉到不理解的是楼主说“ava   web条件下通过一个jsp页面插入一条记录,另一个jsp页面把它读出来,但是通过一个jsp页面插入一条记录再通过java   application就读不到这条记录”。如果是访问同样的库,没出错应该不会这样。
    最终的目的,就是web page修改数据库后,使用同样数据的application能够知道。据我所知,这样的问题在ASP平台上可以通过COM技术实现。但不知道Java平台上有没有类似的技术。还望高手指教。
    不过我想可以通过Socket实现。jsp修改数据库以后,通过Socket给application发一个修改消息。
    也可以通过application定时轮询数据库完成。不过这样做以后,就不是“实时”的了,延迟最长为“轮询间隔+一次轮询操作的时间开销+轮询后数据处理时间”。
      

  2.   

    非常感谢anod,我会考虑你的建议,这确实是一个急手的问题,希望更多的大吓参与讨论。也希望有java高手出来指点一二。
      

  3.   

    我想那个app 之所以拿不到数据,只有一个可能,数据库里根本没有你插入的那个数据。也就是你的内存数据库,虽然保存对象,但没有insert到数据库中。当然,反回来讲,如果你的app 修改了数据库的内容,你怎么办?你的web程序怎么检测有数据更新并做好同步所以,如果你解决了这个问题,然后再解决了并发和效率问题,我想中国会出现一个强大的数据库引擎公司。oracle 的 Timeten 也不过如此。但我做不到。呵呵呵!因为你的app不可能改了,所以放弃你的所谓的内存数据库吧! 把你的数据库的内存增大,CPU增多才是更实际的做法。
      

  4.   

    通过一个jsp页面插入一条记录(插到内存?)再通过java   application就读不到这条记录(从数据库读?)改成通过一个jsp页面插入一条记录(插到内存并且插入到数据库)再通过java   application就读不到这条记录(从数据库读)
      

  5.   

        哈哈,谢谢各位大虾,看来各位对我的问题描述都理解了,小弟也是第一次在此发表文章,我已实现了数据库同步处理了及读写的并发控制,可还是读不到。因为它们其实是独立的---应用服务器跟web服务器。但是竟然公司给我了这个任务,只能是把它实现了。
        我公司是门户网站,后台服务器已经很强大了。不过身为门户网站对性能的要求实在是很高。要是没有把这个问题解决掉,公司在性能方面就没有前景。实在没法子也只能把原来的java
    application改掉了,不过最理想还是不改。因为那样就要花大量精力和大量时间,整个后台都要改。
      

  6.   

    使用内存数据库hsqldb,肯定比你自己写的效率高
      

  7.   

    不知道数据库触发器能不能调用http之类的东西写的时候不能改,那只能在被写的时候通知一下了
      

  8.   

    使用Web Cache 技术应该能够解决你的问题
      

  9.   

    建议采用anod 的轮询方法
    根据系统性能调整合适的轮询时间
    同时也可以当作内存的backup,以至于掉电后不丢所有的数据
      

  10.   

    建议这样做其实还有一个原因
    你的application应该是不需要时间性能要求很高的
    所以可以考虑一定的轮询时间牺牲