1

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

但没有帮助。做什么?

4

2 回答 2

1

Mondrian 的默认内存缓存将事物存储在 WeakHashMap 中。这意味着它可以由 JVM 的垃圾收集器自行决定清除。大多数应用程序服务器都设置为定期清理垃圾收集(通常每小时左右)。您必须调整 JVM 的配置以不执行此操作。

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

您还可以实现自己的 SegmentCache SPI 缓存实现。如果您的实现使用硬引用,它们将永远不会被收集。这比较棘手,需要你做大量的学习才能把它做好。您可以从查看默认实现开始,然后从那里开始。

于 2013-07-09T19:07:56.573 回答
0

mondrian 缓存应该缓存起来,直到缓存被故意刷新。也就是说,它使用一个老化的系统来确定应该缓存什么,如果它用完内存来存储数据,最旧的查询会被推出缓存并被替换。

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

于 2013-06-25T20:17:53.407 回答