ASP.NET MVC Отображение нескольких изображений из базы данных. Как эффективно - PullRequest
1 голос
/ 02 марта 2012

У меня есть приложение .NET MVC, в котором мне нужно отобразить список изображений с текстом. Изображения и текст хранятся в базе данных в той же таблице и возвращаются в моей простой модели. Чего я не понял, так это как показать все эти изображения без повторного попадания в базу данных для каждого отдельного изображения.

Я вижу несколько примеров, таких как:

и другие, но все они возвращаются в базу данных для каждого изображения. Это не имеет смысла, потому что могут быть десятки изображений, и я не хочу продолжать совершать одиночные вызовы в базу данных, когда у меня уже есть данные изображений, возвращенные в моей модели.

Я новичок в ASP.NET MVC (и также никогда не работал с изображениями, хранящимися в БД ранее), и я думаю, что мне чего-то не хватает, и это не может быть таким трудным. Если бы кто-то решил это, я бы хотел услышать это, и я думаю, что другие тоже, основываясь на других вопросах, уже здесь.

Ответы [ 3 ]

4 голосов
/ 02 марта 2012

Просто попал в базу данных несколько раз. Однажды я подумал, что это умная идея - загружать изображения вместе с текстом в кеш, а затем делать недействительным кеш, когда их обслуживают. Мне также пришлось генерировать случайные URL-адреса, чтобы разные пользователи не делали кэш другого недействительным. Я думал, что было так умно сократить количество запросов к БД.

Мне теперь так стыдно за эту "хитрость", и я никому не говорю. Не думайте об этом, если у вас нет реальной проблемы с производительностью.

Важно реализовать кэширование на стороне клиента, задав соответствующие заголовки. Изображения лучше кэшируются на клиенте, чем на сервере, потому что даже если вы кэшируете на сервере, вы все равно получаете удар по сети, если не кэшируете на клиенте.

Также попадание в базу данных по первичному ключу (я предполагаю, что именно так вы собираетесь получать изображения) - не дорогая операция, и если только изображения не занимают 2 МБ +, я бы не стал беспокоиться о переносе из базы данных на веб-сервер.

Редактировать: И я только что рассказал всем о своем стыде: (

2 голосов
/ 02 марта 2012

Вы можете иметь кеш извлеченных изображений, хранящихся в общем контейнере (например, Application).

Когда пользователи запрашивают представление, содержащее изображения, вы извлекаете их и сохраняете в кеше.Затем приходят запросы на изображения, и вы можете просто извлечь их из памяти, не обращаясь к базе данных.

Точная реализация зависит от вашего конкретного сценария, вы можете ограничить количество изображений, хранящихся в кеше, сделать кешавтоматически сбрасывать данные через некоторое время или даже использовать другой контейнер сервера (например, Session).

В любом случае - возвращение ранее полученных данных всегда связано с некоторым типом кэширования на стороне сервера и не должно быть особенно сложным для реализации.

0 голосов
/ 02 марта 2012

Я бы порекомендовал посмотреть на кэширование ASP.NET. Вы можете получить изображения из базы данных один раз и сохранить их в кеше. Последующие запросы будут получать их из кэша до истечения срока его действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...