需要良好的设计模式来缓存数据库查询结果集

时间:2012-12-07 19:30:04

标签: java sql java-ee

我是构建Java Web应用程序的团队的一员,用户将在关系数据库中搜索结果,然后在浏览器中以表格形式查看它们。然后,用户还可以选择在单独的浏览器窗口中查看相同的结果集(或这些结果的子集),例如使用图表工具。换句话说,我们需要让用户能够在以后可视化相同的结果集记录(最多24小时)。

由于对系统的搜索将是资源密集型且仅仅是出于良好的常识,我们希望以一种干净的方式来缓存每个结果集,以便稍后可以从内存(RAM或磁盘)中提取它。 我们正在寻找一种很好的方法来实现这种缓存,我们相信其他人之前已经这样做了,我们更喜欢使用最佳实践或框架,而不是从头开始构建这样的东西。服务器将有足够的RAM,但由于可能有数百人使用该系统,我们可能需要一种先存储到RAM的方法,但如果RAM已满,也可以缓存到硬盘。

我认为坚持Java对象是最有意义的,但我愿意接受更好的建议。我们希望采用与供应商无关的方法,因此如果数据库团队选择稍后切换供应商,我们就不会使用专有解决方案。感谢。

3 个答案:

答案 0 :(得分:4)

我认为你可能正在寻找的是Terracotta Ehcache。这会做你提到的一切以及更多。它是一个免费的产品,可用于缓存内存中的内容,溢出到磁盘,指定MB或项目的最大缓存大小,并根据上次访问时间或进入时间到期。

答案 1 :(得分:1)

我见过http://www.jboss.org/infinispan/曾经这样做过。它可以缓存到内存,磁盘和/或数据库。我不会说我喜欢它(配置不是非常简单,文档有点缺乏)但它肯定有效并且得到了积极维护。

答案 2 :(得分:1)

供应商中立就是编写一个应用程序原生的抽象层,然后插入您希望在此层后面使用的缓存服务,同时保持将这些操作暴露给主代码的层。

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

大多数情况下,您会将对象序列化并将其保留在缓存层中。