2013-03-22 6 views
1

Я использую Saiku и PHPAnalytics для запуска запросов MDX на моем кубе. кажется, что если я запускаю запросы, все хорошо, кеширование в порядке. Но если я уйду на 2 часа и снова запустил эти запросы - он не использует кеш! Зачем? Мне нужно, чтобы кеш сохранялся в течение длительного времени! Что делать? Я попытался добавить этот ti mondrian.properties mondrian.rolap.CachePool.costLimit = 2147483647OLAP Saiku Cache истекает

Но никакой помощи. Что делать?

+0

У нас та же проблема. К счастью, мы все равно краем наши кеши каждые 60 минут и повторно заполняем их новыми данными. –

+0

Я думаю, что это то, что я тоже буду делать. Ваш кеш стоит 60 минут? –

+0

Я не уверен, но я думаю, что так и есть. –

ответ

1

Кэш-память по умолчанию в Mondrian хранит вещи в файле WeakHashMap. Это означает, что он может быть очищен по усмотрению сборщика мусора JVM. Большинство серверов приложений настроены на периодическую развертку сбора мусора (обычно каждый час или около того). Вы должны либо настроить настройки JVM, чтобы этого не делать.

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

Вы также можете реализовать свою собственную реализацию кэша в SegmentCache SPI. Если ваша реализация использует жесткие ссылки, они никогда не будут собраны. Это сложнее, и вам потребуется немного заняться изучением, чтобы все было правильно. Вы можете начать с просмотра default implementation и начать с этого момента.

0

Мондрейский кэш должен кэшироваться до тех пор, пока кеш не будет намеренно очищен. При этом он использует систему старения для определения того, что должно быть кэшировано, если у него закончится нехватка памяти для хранения данных, самый старый запрос выталкивается из кеша и заменяется.

Я не пробовал материал PHPAnalytics, но, возможно, они вызвали некоторый вызов на сервер Saiku, чтобы регулярно очищать кеш, иначе этого не должно произойти.

Смежные вопросы