2013-03-22 99 views
1

我使用Saiku和PHPAnalytics在我的多维数据集上运行MDX查询。 它似乎如果我运行查询它都很好,缓存是好的。但是,如果我花2小时再次运行这些查询 - 它不会使用缓存!为什么?我需要将缓存保存很长时间!该怎么办?我尝试添加该TI mondrian.properties mondrian.rolap.CachePool.costLimit = 2147483647OLAP Saiku缓存过期

但没有帮助。什么做?

+0

我们有同样的问题。幸运的是,我们无论如何都会每隔60分钟刷新一次缓存,并使用更新的数据重新填充缓存。 – 2013-03-22 13:10:22

+0

我想这也是我要做的。你的缓存有60分钟吗? – 2013-03-22 13:34:08

+0

我不确定,但我认为它确实。 – 2013-03-25 21:55:26

回答

1

WeakHashMap中默认的内存缓存的蒙德里安商店的东西。这意味着它可以由JVM的垃圾收集器自行清理。大多数应用程序服务器都设置为定期扫描垃圾回收(通常每个小时左右)。你必须调整你的JVM的配置,不要这样做。

-Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000

您还可以实现SegmentCache SPI你自己的缓存实现。如果你的实现使用了严格的引用,它们将永远不会被收集。这很难做,而且需要你做一些相关的研究才能做对。您可以先看看default implementation并从那里开始。

0

蒙德里安缓存应该缓存,直到缓存是故意刷新。也就是说,它使用老化系统来确定如果内存不足以存储数据,应该缓存哪些内容,最老的查询将被推出缓存并进行替换。

我没有尝试过的东西PHPAnalytics,但也许他们已经把一些调用到斋宫服务器刷新定期缓存,否则这不应该发生。