Рекомендации по обновлению контента, созданного пользователями, в CDN

Мне трудно принять решение о том, как обрабатывать пользовательские загрузки без сохранения значений имени файла в базе данных. Когда пользователь загружает, скажем, аватар/изображение профиля, я создаю его в CDN. Мой помощник аватара в PHP знает URL-адрес контейнера, поэтому я могу просто повторить 'http://cdn-static-url.com/'.$userId.'.jpg

Но если пользователь повторно загружает/меняет свой аватар, старое изображение по-прежнему кэшируется в CDN до истечения TTL или я отправляю запрос на очистку (я использую Cloud Files и имею неограниченное количество запросов на очистку, но даже в этом случае очистка не сразу).

Как мне разрешить повторную загрузку изображения и либо;

  • немедленно принудительно внести изменения,
  • предупредите пользователя о статусе очистки («Обновление вашего нового изображения может занять X времени», я даже никогда не видел этого)
  • создайте новый объект в CDN, что будет означать сохранение ссылки на имя файла в MySQL (тогда я буду делать SELECT каждый раз, когда хочу отобразить URL-адрес аватара на странице...)
  • использовать вышеуказанное и использовать Memcache для текущего URL-адреса каждого объекта?

person Dog    schedule 24.02.2013    source источник
comment
Третий вариант кажется хорошим.   -  person Waleed Khan    schedule 25.02.2013


Ответы (1)


Очень дешевый, но часто используемый на практике вариант — генерировать идентификатор ревизии при каждом изменении. Затем вы должны использовать эту версию для ссылки на совершенно новое имя файла (<revision>.extension) или добавить версию к семантически релевантному URL-адресу в качестве параметра запроса (user/profile.jpg?<revision>).

person Mirko Adari    schedule 24.02.2013
comment
Понятно. Но я предполагаю, что мне нужно будет сохранить номер ревизии/версии в таблице базы данных? - person Dog; 25.02.2013
comment
Что я сделал, так это сохранил столбец updated_at и хешировал его для создания идентификатора. Но концепция остается неизменной независимо от того, какую техническую реализацию вы выберете. - person Mirko Adari; 25.02.2013