select, хотелось бы во время ее работы уметь кешировать данные, в каком-то месте, что бы при следующем вызове этой функции их использовать. Понятно, что напрямую модифицировать таблицы нельзя при вызове из select, но может есть какой-то механизм?
Можно? Оно же ругается как-то нехорошо на такое, вроде бы точно на postgres это видел
Да, можно. Кто "он" и где Вы такое видели?
Это все можно, но нужно ли делать именно так? Мб есть другие решения?
задача такая - функция выдает часть адреса из кладр, и вероятность того, что после запроса адреса запросят еще часть этого же адреса очень велика. Поэтому хотелось бы уже обработанные запрошенные адреса как-то сохранять, т.к. сама обработка не быстрая
Кеширование на бэкенде?
да, это серверные процедурки на pgsql
Хз, очень странно звучит. Будто бы обычного селекта было бы достаточно, но видимо у вас есть какие то хитрости помимо описанных. В любом случае, задача ваша, проект тоже. Есди хотите так, то делайте функцию volatile и тд и тп...
А как у вас получается, что несчастный адрес из кладра небыстро возвращается?
это был пример, не будьте буквоедами-занудами)
Кажется, вы пытаетесь сделать работу самого PostgreSQL по кэшированию. Поддержание кэша это сложно, ещё одна точка отказа. Может быть стоит подумать о структуре таблиц, и индексах. Например разделить таблицы на секции по регионам, и составные индексы.
в идеале, конечно так надо, но для многих задач все равно нужен некий подобный механизм.
Я немного игрался с этим (даже в редис клал). Механизм был такой: - при выборке проверить, а нет ли в кэше (не бесплатная процедура, тоже нужны индексы) - положить в кэш - отдать нужное в ответ ... - запустить джоб очистки кэша (ой, кажется время выбрали неудачно, у нас блокировки) - перейти на подневной (часовой, минутный) кэш, разбив его по секциям, чтобы быстро делать DETACH - DROP
...и все реализовано за вас, только подключите нужную библиотеку
Обсуждают сегодня