如果系统中需要自己做cache,采用什么方式好呢?

我正要做一个项目,需要和海量数据库打交道
该项目牵扯到的几十个报表中的数据都是从庞大的数据库中统计而来,
以前的项目中我用sessionbean进行类似的数据统计处理,用的是oracle的ias应用服务器,我当时认为靠ias和sesstionbean提供的通用的缓存机制能够满足速度上的要求,结果不行,因为效率问题导致项目失败。
在这个报表项目中,我想通过xml文件做cache,把统计出来的结果集先写到xml里,然后报表从xml文件里取数据。这样就避免了用户每一次查询报表,系统就要重新从数据库中统计一遍数据。
这种用xml进行自定义的cache合适吗?有没有别的合理的方式来实现?
大家在做海量数据库查询的情况下,采用什么方式做进行性能上的优化?

海量数据查询可行的方式,是采用DB Server临时表,可以用userid、remote IP等作为标示,把这一部分负载交给数据库,充分发挥数据库的性能优势。
实际应用此方法效果不错。

使用一一对应的视图view能不能满足你呢?

将数据对象转化为XML,也消耗性能,直接缓存前台需要的数据对象Model是最好的。

一般在我的设计中,我会使用两级缓存,Web层缓存和EJB缓存,EJB缓存就是使用Session Bean实现。

海量数据库怎么能用ejb或者xml的缓存呢?
这类的统计,数据的重复使用很少,用ejb根本不起什么作用,反而使系统更加复杂

感觉用jdbc最好,重点放在优化sql语句和数据库上

不能会使锤子就把所有东西看成是钉子

请问你说的这个应该如何做?

XML文件不会提高效率,可能比数据库还慢。
我认为使用View或者存储过程会比较好,这样数据库会预编译你的SQL,可以提高效率。
另外,可以将经常使用的数据对象在内存中做cache,绝对快。还有,你的哪些报表如果不是实时性要求很高,也可以作成临时表或视图。
最后,在数据统计的时候提供一个进度条,别让用户干等--项目成败的关键在于用户。

我现在做的系统,也因为需要处理海量数据而特别的慢,ORCAL 的技术人员建议我们使用临时表,和对查询语句进行调优的方式解决这个问题。现在还没有通过测试,诸位大侠还有什么更好的方法吗?

可以在数据库闲的时候启动定时处理程序,调度存储过程完成预统计功能。不过如果你的实时性要求特别强,那么还要想另外的办法。

XML慢,用中间表加上内存cache

电信计费系统的数据是相当相当庞大的。我们的做法是(oracle)充分利用partition和索引优化,一般的问题都不会成为问题。

请教下电信的系统要不要时常做数据统计汇总的,几十亿的数据如何group by?

这个只能用数据仓库来解决

我同楼上遇到类似的问题,我是做审计软件,需要采集大量的财务数据,并对其进行分析,这种海量数据不是一般,所以我一直在构思设计一套缓存。
其实数据库服务器、应用程序服务器都有缓存。那么我们所设计的缓存应该是针对系统的。楼上的一些方法都不太可取。这里,我提供一些我的思路吧。
系统需要缓存表现在两个方面,第一、频繁的数据库查询访问,而内容又往往相同;第二、海量的数据,又不能全部依靠内存。
我所思考的缓存来自于CPU的cache思想,根据内存、本地文件、数据访问建立三级访问机制。另外从操作系统的概念里可以借鉴段、页式存储的概念。首先在内存中维护一个段页表,并维护一定量的对象数量(根据系统的内存情况设置一级缓存的大小),在系统访问内存中不存在的时候,再在段页表中查询本地文件是否存在相关对象,存在这载入(本地的IO访问自然会比通过网络访问数据库快);如果再没有,再进行远程的数据库访问。
一般来说,要做缓存要解决两个比较重要的问题,第一就是缓存对象的释放机制(究竟是采用时间片、先进先出、最近一段访问量小的出等各种算法需要好好考虑,最好能有不同的实现);第二,就是对于大系统的缓存分布式交换及处理问题;第三,就是应该保证所有的更新需要经过缓存的过滤问题。
JCS是一个比较不错的,只不过没有看到其源代码,所以不太了解其实现的方式。以上是一个思路,我也只是处于考虑阶段(目前没有这样的项目压力),况且真正实施也不是一个人可以做得了的。仅供楼主参考吧!

我决定采用建立中间统计表的方式来实现
外加view和存储过程的技术
数据库访问采用ibatis

不知道最终做出的效果怎么样