我正在使用Saiku和PHPAnalytics在我的多维数据集上运行MDX查询。 似乎我运行查询一切都很好,缓存很好。但是,如果我再去2个小时并再次运行这些查询 - 它不使用缓存!为什么?我需要缓存保存很长时间!该怎么办?我试图添加这个ti mondrian.properties mondrian.rolap.CachePool.costLimit = 2147483647
但没有帮助。怎么办?
答案 0 :(得分:1)
Mondrian的默认内存缓存将内容存储在WeakHashMap中。这意味着它可以由JVM的垃圾收集器自行决定清除。大多数应用程序服务器都设置为定期扫描垃圾收集(通常每小时左右)。您必须调整JVM的配置才能执行此操作。
-Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000
您还可以实现自己的SegmentCache SPI缓存实现。如果您的实现使用硬引用,则永远不会收集它们。这样做比较棘手,需要你做一些学习才能做到正确。您可以先看一下default implementation,然后从那里开始。
答案 1 :(得分:0)
mondrian缓存应该缓存,直到故意刷新缓存。也就是说它使用老化系统来确定当内存不足以存储数据时应该缓存什么,最旧的查询被推出缓存并被替换。
我没有尝试过PHPAnalytics的东西,但也许他们已经打电话给Saiku服务器定期刷新缓存,否则这不应该发生。