Хранение двоичных данных (изображений, файлов и т. д.) с использованием WPF + Windows Azure

У меня есть приложение WPF, которое использует Windows Azure в качестве серверной части. Я использую SQL Azure для хранения данных, к которым обращается приложение WPF через службу WCF. Мне нужно иметь возможность хранить двоичные файлы (например, изображения) на стороне сервера и задаваться вопросом, как лучше всего хранить эти файлы. Я могу поместить файлы в базу данных SQL, но я не уверен, что это рекомендуется. Предположим, что нужно сохранить около 2000 файлов (общий размер ~ 1 ГБ). К этим файлам часто обращаются (предпочтительно кэшируются на клиенте).

Какие-либо предложения?


person Pking    schedule 18.05.2012    source источник


Ответы (2)


Как отметил @Blam, хранилище BLOB-объектов — гораздо лучший способ хранения больших двоичных объектов. У каждого большого двоичного объекта есть URI, который выглядит как https://mystorage.blob.core.windows.net/somecontainer/someblob.jpg. Каждый большой двоичный объект может иметь размер до 200 ГБ. Вы можете легко сохранить URI большого двоичного объекта в SQL Azure вместе со связанными метаданными.

Затем у вас есть выбор: либо вернуть изображение через службу WCF, либо предоставить прямой доступ. В первом случае вы в основном делаете вызов к хранилищу больших двоичных объектов из реализации службы WCF, чтобы получить большой двоичный объект, а затем возвращаете его в ответе WCF.

С последним немного сложнее. Вы можете сделать большие двоичные объекты общедоступными или частными. Общедоступные большие двоичные объекты отлично подходят для логотипов, CSS и другой информации, для просмотра которой не требуются разрешения пользователя. Частные большие двоичные объекты требуют использования ключа вашей учетной записи хранения (который вы никогда не должны выдавать). Однако, используя функцию под названием Подпись общего доступа, вы можете предоставить URL со специальным хэшем в строке запроса, предоставляя временный доступ (до 1 часа). Основной компромисс: если вы используете службу WCF для загрузки двоичных файлов, ваш код будет работать так же, как и с любой другой службой WCF, но вы можете масштабироваться до нескольких экземпляров виртуальной машины Azure для поддержки повышенной нагрузки. Если вы используете подписи общего доступа, вам, вероятно, потребуется изменить приложение WPF, чтобы получить двоичный файл на основе URL-адреса. Однако это разгрузит вашу службу WCF, так как вы будете напрямую обращаться к хранилищу BLOB-объектов для загрузки двоичного содержимого (которое представляет собой крупномасштабную многопользовательскую систему хранения, управляемую Windows Azure).

См. здесь цены на хранилище Windows Azure. При цене менее 13 центов за ГБ это значительно дешевле, чем SQL Azure.

person David Makogon    schedule 18.05.2012
comment
Спасибо! Хранение URI в больших двоичных объектах кажется подходящим способом. - person Pking; 18.05.2012
comment
Отличный совет по подписи общего доступа. Через сервис у меня могут быть счетчики клиентов для выставления счетов. Есть ли способ отслеживать доступ по контейнеру с подписью общего доступа? - person paparazzo; 19.05.2012
comment
Взгляните на Storage Analytics Windows Azure. У вас есть ведение журналов (индивидуальный доступ) и метрики (ежечасные сводки). Ведение журнала включает в себя каждый отдельный доступ к хранилищу таблиц/BLOB-объектов/очередей (вы выбираете, что включить). Ведение журнала BLOB-объектов включает подписи общего доступа. - person David Makogon; 19.05.2012
comment
Спасибо, похоже, я могу использовать ‹requested-object-key› для отслеживания по контейнерам. - person paparazzo; 19.05.2012

Лазурные капли. SQL Azure дороже по сравнению с большими двоичными объектами.

 http://www.windowsazure.com/en-us/home/features/storage/
person paparazzo    schedule 18.05.2012