本人公司碰到一个有关内存的极难问题,望大虾赐教。

bruce_wsf 2008-02-23 07:31:38
为了提高性能,让服务器一启动时就把数据库的数据一次加载到内存“有点像内存数据库”(本人已通过数组和hashmap实现),我已实现了在java web条件下通过一个jsp页面插入一条记录,另一个jsp页面把它读出来,但是通过一个jsp页面插入一条记录再通过java application就读不到这条记录,我估计是java应用程序服务器跟web程序服务器的差别,它们是独立的两个进程。公司原来有一个java application和一个web 程序,要是都改成web形式那成本很高,望大虾们能提供一个可用的解决方案,能让这两个不同方式系统可共用同一个内存。或是提供其它可用的解决方案。
...全文
258 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ochinchina 2008-02-25
  • 打赏
  • 举报
回复
使用Web Cache 技术应该能够解决你的问题
liang8305 2008-02-25
  • 打赏
  • 举报
回复
不知道数据库触发器能不能调用http之类的东西

写的时候不能改,那只能在被写的时候通知一下了
9441 2008-02-25
  • 打赏
  • 举报
回复
使用内存数据库hsqldb,肯定比你自己写的效率高
zdjray 2008-02-25
  • 打赏
  • 举报
回复
建议这样做其实还有一个原因
你的application应该是不需要时间性能要求很高的
所以可以考虑一定的轮询时间牺牲
zdjray 2008-02-25
  • 打赏
  • 举报
回复
建议采用anod 的轮询方法
根据系统性能调整合适的轮询时间
同时也可以当作内存的backup,以至于掉电后不丢所有的数据
bruce_wsf 2008-02-24
  • 打赏
  • 举报
回复
非常感谢anod,我会考虑你的建议,这确实是一个急手的问题,希望更多的大吓参与讨论。也希望有java高手出来指点一二。
bruce_wsf 2008-02-24
  • 打赏
  • 举报
回复
哈哈,谢谢各位大虾,看来各位对我的问题描述都理解了,小弟也是第一次在此发表文章,我已实现了数据库同步处理了及读写的并发控制,可还是读不到。因为它们其实是独立的---应用服务器跟web服务器。但是竟然公司给我了这个任务,只能是把它实现了。
我公司是门户网站,后台服务器已经很强大了。不过身为门户网站对性能的要求实在是很高。要是没有把这个问题解决掉,公司在性能方面就没有前景。实在没法子也只能把原来的java
application改掉了,不过最理想还是不改。因为那样就要花大量精力和大量时间,整个后台都要改。
malligator 2008-02-24
  • 打赏
  • 举报
回复
通过一个jsp页面插入一条记录(插到内存?)再通过java application就读不到这条记录(从数据库读?)

改成

通过一个jsp页面插入一条记录(插到内存并且插入到数据库)再通过java application就读不到这条记录(从数据库读)
老紫竹 2008-02-24
  • 打赏
  • 举报
回复
我想那个app 之所以拿不到数据,只有一个可能,数据库里根本没有你插入的那个数据。

也就是你的内存数据库,虽然保存对象,但没有insert到数据库中。

当然,反回来讲,如果你的app 修改了数据库的内容,你怎么办?你的web程序怎么检测有数据更新并做好同步

所以,如果你解决了这个问题,然后再解决了并发和效率问题,我想中国会出现一个强大的数据库引擎公司。

oracle 的 Timeten 也不过如此。但我做不到。呵呵呵!

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

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧