Является ли SQL Server 2008 хорошим вариантом для использования в качестве хранилища изображений для веб-сайта электронной коммерции? Он будет использоваться для хранения изображений продуктов различных размеров и углов. Веб-сервер выводит эти изображения, считывая таблицу с помощью кластерного идентификатора. Общий размер изображения составит около 10 ГБ, но его нужно будет масштабировать. Я вижу много преимуществ по сравнению с использованием файловой системы, но я обеспокоен тем, что SQL-сервер, не имеющий O (1), не является лучшим решением, учитывая, что на сайте много трафика. Это будет даже бутылочка? Каковы некоторые мысли или, возможно, другие варианты?Использование SQL Server в качестве хранилища изображений
ответ
10 Gb - это не очень большой объем данных, поэтому вы, вероятно, можете использовать базу данных для ее хранения и не иметь больших проблем, но, конечно, лучше всего использовать файловую систему, а управление безопасностью - лучше использовать БД (резервные копии и согласованность).
К счастью, SQL Server 2008 позволяет иметь свой кусок пирога и съесть его, с:
В SQL Server 2008 можно применить атрибут FILESTREAM к колонку VARBINARY и SQL Server затем сохраняет данные для этого столбца в локальной файловой системе NTFS. Сохранение данных в файловой системе приводит к двум основным преимуществам:
- Производительность соответствует потоковой производительности файловой системы.
- Размер BLOB ограничен только размером тома файловой системы.
Однако столбец можно управлять так же, как любым другим столбец BLOB в SQL Server, поэтому администраторы могут использовать управление и безопасность возможности SQL Server для интеграции управления данными BLOB с остальными данными в реляционной базе данных - без необходимости отдельно управлять данными файловой системы.
Определение данных как столбца FILESTREAM в SQL Server также обеспечивает согласованность на уровне данных между реляционными данными в базе данных и неструктурированными данными, которые физически хранятся в файловой системе. Столбец FILESTREAM ведет себя точно так же, как и столбец BLOB, что означает полную интеграцию операций обслуживания, таких как резервное копирование и восстановление, полная интеграция с моделью безопасности SQL Server и полная поддержка транзакций.
Разработчики приложений могут работать с данными FILESTREAM через одну из двух моделей программирования; они могут использовать Transact-SQL для доступа и управления данными, как и стандартные столбцы BLOB, или они могут использовать потоковые API Win32 с транзакционной семантикой Transact-SQL для обеспечения согласованности, что означает, что они могут использовать стандартные вызовы чтения/записи Win32 для FILESTREAM BLOB, как если бы они взаимодействовали с файлами в файловой системе.
В SQL Server 2008 столбцы FILESTREAM могут хранить данные только на томах локального диска, а для столбцов FILESTREAM не поддерживаются некоторые функции, такие как прозрачное шифрование и табличные параметры. Кроме того, вы не можете использовать таблицы, содержащие столбцы FILESTREAM в моментальных снимках базы данных или сеансах зеркального отображения базы данных, хотя поддерживается отправка журналов.
Для чего-то вроде веб-сайта электронной коммерции, я бы, скорее всего, поместил изображение в хранилище blob в базе данных. Хотя вы не хотите заниматься преждевременной оптимизацией, простое преимущество того, чтобы мои изображения были легко организованы вместе с моими данными, а также очень портативными, - это одно автоматическое преимущество для чего-то вроде электронной торговли.
Если изображения индексируются, поиск не будет большой проблемой. Я не уверен, но я не думаю, что поиск файловой системы - O (1), больше похож на O (n) (я не думаю, что файлы индексируются файловой системой).
Что меня беспокоит в этой настройке - это размер базы данных, но если правильно управлять, это не будет большой проблемой, и большое преимущество в том, что у вас есть только одна вещь для резервного копирования (базы данных) и не беспокоиться о файлах на диске.
Как правило, хорошим решением является хранение изображений в файловой системе и метаданные (имя файла, размеры, последнее обновленное время и все, что вам нужно) в базе данных.
Сказав это, «правильного» решения нет.
нет «правильного» решения для этого .. до SQL 2008. См. Другие ответы. В SQL 2008 для этого есть новая конструкция - FILESTREAM. – Anthony
Заканчивать эту белую бумагу от MS Research (http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45)
Они подробно именно то, что вы ищете. Краткая версия заключается в том, что любой размер файла более 1 МБ начинает ухудшать производительность по сравнению с сохранением данных в файловой системе.
Последнее обновление было произведено в июне 2006 г. и применимо только к SQL Server 2005. –
Я сомневаюсь, что O(log n)
для поиска будет проблемой. Вы говорите, что у вас 10 ГБ изображений. Предполагая, что средний размер изображения составляет 50 КБ, это 200 000 изображений. Выполнение индексированного поиска в таблице для строк 200K не является проблемой. Он был бы небольшим по сравнению с временем, необходимым для фактического чтения изображения с диска и передачи его через ваше приложение и клиенту.
По-прежнему стоит учитывать обычные плюсы и минусы хранения изображений в базе данных по сравнению с сохранением путей в базе данных к файлам в файловой системе. Например:
- Изображения в изоляции транзакций ПОВИНУЕТСЯ базы данных, автоматически удалять, если строка будет удалена и т.д.
- базы данных с 10GB изображений, конечно, больше, чем в базе данных, хранящей только путей доступа к файлам изображений. Резервная скорость и другие факторы актуальны.
- Необходимо настроить заголовки MIME на ответ, когда вы подаете изображение из базы данных через приложение.
- Изображения в файловой системе легче кэшируются веб-сервером (например, Apache mod_mmap) или могут обслуживаться более компактным веб-сервером, таким как lighttpd. Это на самом деле довольно большая выгода.
Ваш последний вопрос на самом деле очень важен. Рассмотрим ситуацию перемещения изображений в хранилище вне офиса, например S3 или CDN. – Min
Также ознакомьтесь с http://nginx.net/ для другого инструмента, который может помочь. Это своего рода прокси для Apache, на стороне ответа. Интересно! –
- 1. Использование SQL Server в качестве хранилища Орлеана
- 2. Использование Lucene в качестве хранилища
- 3. Использование SQL Server Management Studio с Azure SQL хранилища данных
- 4. SQL Server - дизайн хранилища EBS
- 5. Использование изображений в качестве кнопок?
- 6. Использование статического вектора в качестве хранилища
- 7. Использование icloud в качестве хранилища базы данных
- 8. Использование Elasticsearch в качестве резервного хранилища
- 9. Использование хранилища документов в качестве кеша
- 10. Использование статического класса в качестве хранилища
- 11. Использование hsqldb в качестве хранилища ключей
- 12. Использование memcache в качестве хранилища сеансов?
- 13. Использование сетевого диска в качестве хранилища мерзавца
- 14. SQL Server 2008 хранилища данных
- 15. Использование имени таблицы в качестве параметра в SQL Server?
- 16. Использование C++ dll в качестве сборки в SQL Server
- 17. Использование ehcache в качестве хранилища данных inmemory - Высокая память Использование
- 18. Использование основных данных в качестве хранилища для удаленных объектов
- 19. Использование изображений в качестве заголовков в таблицеView
- 20. Использование значения локальной переменной в качестве критериев запроса SQL Server
- 21. Использование SQL Server FILESTREAM GUID в качестве первичного ключа
- 22. Использование SQL Server в качестве запирающего ресурса механизма
- 23. Использование выражений в качестве параметра для функции SQL Server
- 24. Использование SQL Server в качестве очереди БД с несколькими клиентами
- 25. Использование MS Access в качестве интерфейса SQL Server
- 26. Использование CLR UDT в качестве параметров хранимой процедуры SQL Server
- 27. Использование набора изображений в качестве входных данных
- 28. Использование галереи изображений в качестве меню
- 29. Кэширование AppFabric с Azure SQL в качестве хранилища конфигурации
- 30. База данных изображений SQL Server
Насколько велика в Kb типичная картина? Насколько велики 1%? Существует ли верхний предел потенциального размера изображения? – Anthony