2012-12-07 119 views
5

我是团队架构Java Web应用程序的一员,其中用户将在关系数据库中搜索结果,然后在浏览器中以表格形式查看它们。用户随后还可以选择随后在单独的浏览器窗口中使用例如图表工具查看相同的结果集(或这些结果的子集)。换句话说,我们需要赋予用户后续可视化相同结果集记录的能力(最长可达24小时)。由于系统上的搜索将是资源密集型的,并且出于良好的常识,我们希望有一种干净的方式来缓存每个结果集,以便稍后可以从内存(RAM或磁盘)中将其拉出。 我们正在寻找一个很好的方法来做这个缓存,我们相信其他人已经做到了这一点,我们更喜欢使用最佳做法或框架,而不是从头开始构建这样的事情。服务器将拥有大量内存,但由于可能有数百人在使用该系统,因此我们可能需要一种先存储到RAM的方法,但如果RAM已满,也可以缓存到硬盘。需要优秀的设计模式来缓存数据库查询结果集

我认为坚持为Java对象是最有意义的,但我愿意提供更好的建议。我们希望采用独立于供应商的方法,以便在数据库团队选择稍后切换供应商时,我们不会陷入专有解决方案。谢谢。

+3

ahhh文字墙。请至少格式化,以防止血腥的眼睛 – thatidiotguy

+0

如果你格式化你的问题,并尽可能简单和尽可能地点,你会得到更好的结果。 –

+0

请编辑您的文章,使其更可读... –

回答

1

我见过http://www.jboss.org/infinispan/用来做到这一点。它可以缓存到内存,磁盘或数据库。我不会说我喜欢它(配置不是很容易,文档有点缺乏),但它肯定是有效的并且得到积极维护。

1

作为供应商中立的所有人都是为你的应用程序编写一个原生的抽象层,然后插入你想在这个层后面使用的缓存服务,同时让你的主层代码暴露这些操作。

有很多方法可以缓存。研究使用各种NoSql解决方案。

大多数时候,你会序列化你的对象,并坚持到你的缓存层。

4

我想你可能要找的是Terracotta Ehcache。这可以做你提到的所有事情和更多。它是一个免费的产品,可用于在内存中缓存内容,溢出到磁盘,按MB或项目数指定最大缓存大小,并根据上次访问时间或输入时间过期。

+0

EhCache很漂亮。我的经验一直是“正常工作”。 –