使用saiku的人,肯定都有这么一个经历,查询了一次多维分析数据表,第二次之后就特别快,因为它缓存了结果,可问题是过了一天,甚至几天,来源数据早都更换了,可还是这个缓存结果。问题来了,缓存不失效!
那么如何解决这个问题呐?我总结了两个办法:
一、不使用缓存
这个方案修改起来特别简单:修改mandrian配置文件tomcat/webapps/saiku/WEB-INF/classes/mondrian.properties,设置失效即可。mondrian.rolap.star.disableCaching=true。
可是这种方案基本不能应用到生产环境,因为数据太大,且是全局属性,在特定的开发环境或许可以用一用
二、定时更新缓存
这个方案略复杂,需要自己写curl命令,模拟管理员点击刷新缓存。
在saiku的管理页面,有一个刷新缓存的按钮,点击之后,会找到这个ajax请求:/saiku/rest/saiku/admin/datasources/mini_com_order_detail/refresh 其中mini_com_order_detail是立方体的名称,更换即可。
这个方法,模拟管理员登录是核心,需要下载cookie,然后访问这个链接,我把代码粘贴上来,大家参考:
#!/bin/bash
#获取时间参数 curl -c ./cookie.txt -d "language=zh&password=admin&username=admin" http://***.qunar.com:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://***.qunar.com:8080/saiku/rest/saiku/admin/datasources/%E4%B8%80%E6%97%A5%E6%B8%B8/refresh"
那么这个任务我会在etl执行之后,刷新缓存