Использование SQL Server в качестве хранилища изображений
-
22-07-2019 - |
Вопрос
Является ли SQL Server 2008 хорошим вариантом для использования в качестве хранилища изображений для веб-сайта электронной коммерции?Он будет использоваться для хранения изображений товаров различных размеров и ракурсов.Веб-сервер будет выводить эти изображения, считывая таблицу по кластеризованному идентификатору.Общий размер изображения составит около 10 ГБ, но его необходимо будет масштабировать.Я вижу много преимуществ в использовании файловой системы, но меня беспокоит, что SQL server, не имеющий поиска O (1), не является лучшим решением, учитывая, что на сайте много трафика.Было бы это вообще бутылочным горлышком?Какие есть мысли или, возможно, другие варианты?
Решение
10 Гб - это не такой уж большой объем данных, поэтому вы, вероятно, можете использовать базу данных для их хранения и у вас не возникнет больших проблем, но, конечно, с точки зрения производительности лучше всего использовать файловую систему, а с точки зрения управления безопасностью лучше использовать базу данных (резервные копии и согласованность).
К счастью, Sql Server 2008 позволяет вам получить свой пирог и съесть его тоже с помощью:
В SQL Server 2008 вы можете применить атрибут FILESTREAM к столбцу varbinary, и SQL Server затем сохранит данные для этого столбца в локальной файловой системе NTFS.Хранение данных в файловой системе дает два ключевых преимущества:
- Производительность соответствует производительности потоковой передачи файловой системы.
- Размер большого двоичного объекта ограничен только размером тома файловой системы.
Однако столбцом можно управлять точно так же, как любым другим столбцом больших двоичных объектов в SQL Server, поэтому администраторы могут использовать возможности управляемости и безопасности SQL Server для интеграции управления данными больших двоичных объектов с остальными данными в реляционной базе данных - без необходимости управлять данными файловой системы отдельно.
Определение данных в виде столбца FILESTREAM в SQL Server также обеспечивает согласованность на уровне данных между реляционными данными в базе данных и неструктурированными данными, которые физически хранятся в файловой системе.Столбец FILESTREAM ведет себя точно так же, как столбец BLOB-объектов, что означает полную интеграцию операций обслуживания, таких как резервное копирование и восстановление, полную интеграцию с моделью безопасности SQL Server и полную поддержку транзакций.
Разработчики приложений могут работать с данными FILESTREAM с помощью одной из двух моделей программирования;они могут использовать Transact-SQL для доступа к данным и манипулирования ими точно так же, как стандартными столбцами больших двоичных объектов, или они могут использовать потоковые API Win32 с транзакционной семантикой Transact-SQL для обеспечения согласованности, что означает, что они могут использовать стандартные вызовы Win32 для чтения / записи больших двоичных объектов FILESTREAM, как при взаимодействии с файлами в файловой системе.
В SQL Server 2008 столбцы FILESTREAM могут хранить данные только на томах локального диска, и некоторые функции, такие как прозрачное шифрование и табличные параметры, не поддерживаются для столбцов FILESTREAM.Кроме того, вы не можете использовать таблицы, содержащие столбцы FILESTREAM, в моментальных снимках базы данных или сеансах зеркального отображения базы данных, хотя доставка журналов поддерживается.
Другие советы
Для чего-то подобного веб-сайту электронной коммерции я, скорее всего, захочу сохранить изображение в хранилище больших двоичных объектов в базе данных. Несмотря на то, что вы не хотите заниматься преждевременной оптимизацией, простое преимущество в том, что мои изображения легко упорядочиваются вместе с моими данными, а также очень портативны, - одно автоматическое преимущество для чего-то вроде электронной коммерции.
Если изображения проиндексированы, то поиск не будет большой проблемой. Я не уверен, но я не думаю, что поиск файловой системы - это O (1), больше похоже на O (n) (я не думаю, что файлы индексируются файловой системой).
В этой настройке меня беспокоит размер базы данных, но при правильном управлении это не будет большой проблемой, и большое преимущество заключается в том, что у вас есть только одна вещь для резервного копирования (база данных), и вы не должны беспокоиться о файлы на диске.
Обычно хорошим решением является сохранение самих изображений в файловой системе, а метаданных (имя файла, размеры, время последнего обновления, все, что вам нужно) в базе данных.
Сказав это, нет «правильного» Решение этого.