Ниже приведен упрощенный пример, иллюстрирующий проблему производительности, с которой мы сталкиваемся в нашем приложении.
В нашем приложении есть следующие отношения:
Персона -> Компания -> Изображение логотипа
Где Персона и Компания являются объектами ActiveRecord, а Изображение логотипа - это файл изображения, связанный с Компания с использованием CarrierWave и сохраненный вS3.
У нас есть код, который эффективно работает следующим образом:
persons.collect do |person|
person.company.logo_image.read
end
Проблема с производительностью возникает из-за медленной загрузки logo_image из S3.В приведенном выше примере предположим, что все люди, как правило, принадлежат к одной и той же компании, но это нельзя прямо предположить.Поэтому, как правило, код снова и снова обращается к S3 для извлечения одного и того же объекта.
Есть ли какой-нибудь способ указать, что оператор перевозчика по существу должен хранить кэш локальной файловой системы для файлов, которые он читает?Другими словами, Carrierwave видит, что он просто выбрал объект по пути "AWS: / x / y / z" и вместо этого просто извлекает файл из локальной файловой системы для чтения?Я понимаю, что это вызывает некоторые проблемы с проверкой кэша, но я хочу знать, какие варианты уже существуют, прежде чем создавать собственное решение Frankenstein.
Обратите внимание, что это очень упрощенный пример.В реальной кодовой базе мы не сможем эффективно создать наш собственный «хэш» кеша, который находится до и внутри этого блока кода.
Оцените ваши идеи!