Как долгосрочно «кешировать» результаты в Postgres?

Postgres 9.5
Есть тяжелый запрос. Но данные в нем не обязательно должны быть абсолютно свежими.
Про Materialized view знаю, но судя по всему, это не то, что мне нужно.
Я бы хотел выполнить запрос, даже если он займет несколько секунд,а после этого сохранить его результаты куда-то, где они будут доступны, пока я не решу их обновлять.
Это почти Materialized view, но дело в том, что там есть переменные, и делать MW для со всеми вариациями этих переменных нет смысла. Переменная - это, скажем, сочетание id двух разных пользователей. Делать MW для всех вариаций всех существующих пользователей - бессмысленно. А вот сохранить результаты при первом обращении и показывать их же до истечения какого-нибудь триггера или срока - это то, что надо. Есть какое-то простое решение без необходимости написания кучи триггер-функций?
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 2
@nirvimel
  1. Создаете отдельную таблицу под кеш.
  2. Вместо вашего тяжелого запроса пишите:
    SELECT ... FROM cache_table;
    если получили пустой результат, делаете:
    1. UPDATE cache_table SET ... FROM SELECT ... (тут ваш тяжелый запрос);
    2. SELECT ... FROM cache_table;

  3. На обновление исходных данных делаете триггер для очистки кеша:
    DELETE FROM cache_table WHETE ....
Ответ написан
Комментировать
romy4
@romy4
Exception handler
MW очень даже подходит, ящетаю
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы