Armazenando imagens no SQL Server?

Eu fiz um pequeno site de demonstração e nele eu estou armazenando imagens dentro de uma coluna de imagem no servidor sql. Algumas perguntas que tenho são …

  • Isto é uma má ideia?

  • Isso afetará o desempenho no meu site quando ele crescer?

A alternativa seria armazenar a imagem no disco e armazenar apenas a referência à imagem no database. Este deve ser um dilema comum que muitas pessoas tiveram. Eu gostaria de receber alguns conselhos e ficaria feliz em cometer um erro menor se eu pudesse.

Há um ótimo artigo da Microsoft Research chamado To Blob or Not To Blob .

Sua conclusão após um grande número de testes e análises de desempenho é esta:

  • Se as suas imagens ou documentos estiverem normalmente abaixo do tamanho de 256K, armazená-los em uma coluna VARBINARY do database é mais eficiente

  • Se suas imagens ou documentos tiverem tipicamente mais de 1 MB, armazená-los no sistema de arquivos será mais eficiente (e com o atributo FILESTREAM do SQL Server 2008, eles ainda estarão sob controle transacional e serão parte do database)

  • entre esses dois, é um pouco difícil dependendo do seu uso

Se você decidir colocar suas fotos em uma tabela do SQL Server, recomendo enfaticamente usar uma tabela separada para armazenar essas imagens – não armazene a foto do funcionário na tabela de funcionários – mantenha-as em uma tabela separada. Dessa forma, a tabela Employee pode permanecer enxuta, simples e muito eficiente, supondo que você nem sempre precise selecionar a foto do funcionário, como parte de suas consultas.

Para grupos de arquivos, confira Arquivos e Arquitetura de grupos de arquivos para uma introdução. Basicamente, você criaria seu database com um grupo de arquivos separado para grandes estruturas de dados desde o início ou adicionaria um grupo de arquivos adicional posteriormente. Vamos chamá-lo de “LARGE_DATA”.

Agora, sempre que você tiver uma nova tabela para criar que precisa armazenar colunas VARCHAR (MAX) ou VARBINARY (MAX), é possível especificar esse grupo de arquivos para os dados grandes:

CREATE TABLE dbo.YourTable (....... define the fields here ......) ON Data -- the basic "Data" filegroup for the regular data TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data 

Confira a introdução do MSDN nos grupos de arquivos e brinque com ela!

Eu caí nesse dilema uma vez e pesquisei bastante no google por opiniões. O que eu encontrei foi que, de fato, muitos vêem salvando imagens no disco melhor para imagens maiores, enquanto o mySQL permite um access mais fácil, especialmente de linguagens como o PHP.

Eu encontrei uma pergunta semelhante

MySQL BLOB vs File para armazenar pequenas imagens PNG?

Meu veredicto final foi que para coisas como uma foto de perfil, apenas uma pequena imagem quadrada que precisa estar lá por usuário, o MySQL seria melhor do que armazenar um monte de polegares no disco rígido, enquanto que para álbuns de fotos e coisas assim, pastas / arquivos de imagem são melhores.

Espero que ajude

Eu preferiria armazenar a imagem em um diretório e, em seguida, armazenar uma referência ao arquivo de imagem no database.

No entanto, se você armazenar a imagem no database, deverá particionar seu database para que a coluna da imagem resida em um arquivo separado.

Você pode ler mais sobre como usar grupos de arquivos aqui http://msdn.microsoft.com/en-us/library/ms179316.aspx .

Por que pode ser bom armazenar imagens no database e não em um catálogo no servidor da web.

Você fez um aplicativo com muitas imagens armazenadas em uma pasta no servidor, que o cliente utilizou durante anos.

Agora eles vêm até você. Eles servidor foi destruído e eles precisam restaurá-lo em um novo servidor. Eles não têm mais access ao servidor antigo. O único backup que eles têm é o backup do database.

Você tem, claro, a fonte e pode simplesmente implementá-la no novo servidor, instalar o SqlServer e restaurar o database. Mas agora todas as fotos sumiram.

Se você salvou as imagens no SqlServer, tudo funcionará como antes.

Apenas meus 2 centavos.

Ao armazenar imagens no SQL Server , não use o tipo de dados ‘image’ , de acordo com o MS, ele está sendo desativado em novas versões do SQL Server. Use varbinary (max) em vez disso

https://msdn.microsoft.com/pt-br/library/ms187993.aspx

Outra opção foi lançada em 2012, chamada Tabelas de arquivos: https://msdn.microsoft.com/pt-br/library/ff929144.aspx