Minha pergunta é bastante genérica e sei que pode não haver uma resposta de 100% a ela. Estou construindo uma solução da web ASP .NET que incluirá muitas fotos e, com sorte, uma quantidade razoável de tráfego. Eu realmente quero alcançar desempenho.
Devo salvar as imagens no banco de dados ou no sistema de arquivos? E, independentemente da resposta, estou mais interessado em saber por que escolher uma maneira específica.
Muito obrigado, Stefan
DUPLICADO : Armazenando Imagens no DB - Sim ou Não? , Como armazenar imagens em seu sistema de arquivos , Armazenando um pequeno número de imagens: blob ou fs? e provavelmente alguns outros.
COMENTÁRIO: Obrigado por muitas boas respostas. Vou buscar uma solução baseada em arquivo, mesmo que eu goste da idéia de ter uma solução 100% orientada a banco de dados. Parece que hoje existem boas soluções para fazer o que eu quero com bancos de dados etc, mas tenho algumas razões para não fazê-lo.
Estarei em uma solução hospedada, tenho uma quantidade enorme de armazenamento (10gb), mas apenas 300mb para o banco de dados. Vai custar muito para armazenamento extra no banco de dados.
Eu não sou um especialista em banco de dados e também não estou no controle das configurações do banco de dados. Uma solução baseada em banco de dados pode precisar de configuração personalizada, como parece.
Se passarmos a executar o site em nosso próprio servidor, posso considerar uma solução baseada em banco de dados. obrigado Stefan
fonte
Respostas:
Armazene as imagens no sistema de arquivos e os locais das imagens no banco de dados.
Por quê? Porque...
fonte
Nos meus projetos desenvolvidos recentemente, eu armazenei imagens (e todos os tipos de documentos binários) como colunas de imagens nas tabelas do banco de dados.
A vantagem de ter arquivos armazenados no banco de dados é obviamente que você não terá arquivos não referenciados no disco rígido se um registro for excluído, uma vez que a sincronização entre o banco de dados (= metadados) e o disco rígido (= armazenamento de arquivo) não está embutida. e deve ser programado manualmente.
Usando a tecnologia de hoje, sugiro que você armazene imagens nas colunas FILESTREAM do SQL Server 2008 (pelo menos é o que farei no meu próximo projeto), pois elas combinam a vantagem de armazenar dados no banco de dados E ter binários grandes em arquivos separados (em menos de acordo com a publicidade;))
fonte
O ditado sempre foi "Arquivos no sistema de arquivos, metadados do arquivo no banco de dados"
fonte
Melhor armazenar arquivos como arquivos. Bancos de dados diferentes tratam os dados do Blob de maneira diferente; portanto, se você precisar migrar seu back-end, poderá ter problemas.
Ao veicular os impages, é provável que <img src = para um arquivo que já exista no servidor seja mais rápido do que criar um arquivo temporário no campo do banco de dados e apontar a tag <img para ele.
Encontrei esta resposta pesquisando sua pergunta no Google e lendo os comentários em http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html
fonte
Eu normalmente gosto de ter arquivos binários no banco de dados porque:
fonte
O armazenamento de imagens no banco de dados adiciona uma sobrecarga de banco de dados para veicular imagens únicas e dificulta a transferência para armazenamento alternativo (S3, Akami) se você atingir esse nível. Armazená-los no banco de dados facilita a transferência do aplicativo para um servidor diferente, pois é apenas o banco de dados que precisa ser movido agora.
O armazenamento de imagens no disco facilita o descarregamento para armazenamento alternativo, torna os elementos estáticos para que você não precise mexer nos cabeçalhos HTTP no aplicativo da web para torná-las armazenáveis em cache. A desvantagem é que, se você mover seu aplicativo para um servidor diferente, precisará lembrar também de mover as imagens; algo que é facilmente esquecido.
fonte
Para aplicativos baseados na Web, você obterá melhor desempenho ao usar o sistema de arquivos para armazenar suas imagens. Isso permitirá que você implemente facilmente o armazenamento em cache das imagens em vários níveis no seu aplicativo. Existem algumas vantagens em armazenar imagens em um banco de dados, mas na maioria das vezes essas vantagens vêm com aplicativos baseados no cliente.
fonte
Apenas para adicionar um pouco mais às já boas respostas até agora. Você ainda pode obter os benefícios do cache do nível da web, talvez e do banco de dados, se seguir a rota mantendo as imagens no banco de dados.
Eu acho que para o banco de dados você pode conseguir isso armazenando as imagens em relação aos dados textuais associados a elas e se você pode acessar as imagens em uma consulta específica para que o banco de dados possa armazenar em cache a consulta (apenas a teoria sinta-se livre para me matar nessa parte).
Com o lado da web, eu acho que, uma vez que sua pergunta está marcada com asp.net, você seguiria o caminho de usar um manipulador http para exibir as imagens. Então você tem todos os benefícios da estrutura à sua disposição e pode manter a lógica do domínio mais limpa, tendo apenas que passar a chave da sua imagem para o manipulador http.
fonte
Por que não escolher um banco de dados NoSql individual para armazenar seus arquivos.
Ele traz integridade e consistência dos dados, como o @chburd mencionado.
Enquanto você rdbms ainda permanece pequeno.
fonte
Eclipse
) de armazenamento de imagens no sistema de arquivos e manutenção de seus metadados no banco de dados - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.htmlfonte