Допустим, у меня есть веб-служба погоды, которая загружает каждую страницу. Не очень эффективный или умный и, вероятно, собирается превысить мой лимит API или разозлить владельцев веб-сервисов. Поэтому вместо выборки непосредственно из действия контроллера у меня есть помощник / задание / метод (некоторый уровень), который имеет возможность немного кэшировать данные. Давайте также скажем, что меня не очень заботит актуальность данных в реальном времени.
Теперь то, что я делал в прошлом, - просто сохраняю атрибуты службы погоды в таблице и время от времени обновляю данные. Например, служба погоды может выглядеть так:
Weather for 90210 (example primary key)
-----------------------------
Zip Name: Beverly Hills
Current Temperature: 90
Last Temp: 89
Humidity: 0
... etc.
Так что в этом случае я бы создавал столбцы для каждого атрибута и сохранял их при извлечении из веб-службы. Я мог бы выполнить действие expires rails (кэширование страницы), чтобы выполнить обновление, или я мог бы выполнить фоновую работу.
Этот простой подход работает хорошо, за исключением случаев, когда веб-сервис имеет большой список атрибутов (скажем, 1000). Сейчас я трачу много времени на создание и обслуживание столбцов БД, повторяя уже существующие атрибуты других пользователей. Было бы здорово, если бы я мог просто кэшировать весь ответ и обращаться к нему как к простому хэшу, когда мне это нужно. Тогда у меня будут кешированы все атрибуты, которые веб-сервис предлагает «бесплатно», потому что все возможности веб-сервиса будут в моем хэше, а не просто будут кэшировать подмножество.
Чтобы сделать это, я мог бы получить ответ веб-службы, сериализовать его (возможно, YAML), а затем получить сериализованный объект, если он существует. Мех, не отлично. Сериализация может стать странной со специальными символами. Было бы здорово, если бы я мог просто следовать модели типа memcached, но я не думаю, что вы можете хранить сложные объекты в memcached, верно? Я также хотел бы ограничить количество представляемого программного обеспечения, чтобы автономный уровень прокси был бы неоптимальным для меня.
Кто-нибудь сделал что-то подобное или есть имя для этого?