Imagens do usuário – database vs. armazenamento do sistema de arquivos

Estou escrevendo uma function de upload no .NET para imagens de apresentação em perfis de usuário. Estou escolhendo entre duas maneiras diferentes de fazê-lo e gostaria de pedir conselhos e opiniões sobre os prós e contras.

  1. Armazene as imagens diretamente no sistema de arquivos

  2. Armazene as imagens no database

Até agora eu tenho sido principalmente pro a primeira opção – nomear as imagens após os nomes de usuários, já que cada usuário pode ter apenas uma imagem de apresentação. Então eu faço uma verificação no caminho designado se o usuário tiver uma imagem, se não exibir uma imagem padrão “sem imagem”.

Outra coisa que eu gosto sobre isso é que ele economiza espaço no database – o database será bastante pesado sem a carga binária extra.

Tenho certeza de que há outros aspectos sobre os quais não pensei, por isso gostaria de ouvir suas opiniões sobre isso. Se alguém tiver uma solução radicalmente diferente para o problema, compartilhe isso também!

Sua pergunta foi respondida antes no StackOverflow:

Armazenar imagens como arquivos ou no database para um aplicativo da web

Incluindo muitas outras perguntas duplicadas!

Em geral, é melhor armazenar arquivos no sistema de arquivos. Os filesystems já estão ajustados para armazenar arquivos. No entanto, isso tem suas desvantagens, principalmente em termos de gerenciamento, backup, restauração e é um pouco de um laço frágil entre um campo de caminho de arquivo varchar no database e um arquivo no sistema de arquivos. Qual sistema de database você está usando? Eu acho que se você estiver usando o SQL Server 2008, que o novo tipo FileStream fornece um método muito bom para armazenar arquivos nesse database.

Edit: Nota Eu estou realmente falando mais geralmente sobre o armazenamento de arquivos no database. Há alguma complexidade extra envolvida na tentativa de armazenar imagens que você pretende exibir em páginas HTML no database.

O sistema de arquivos é bom, mas não é prático com mais de 3000 imagens por pasta. É melhor escrever a criação automática de pastas para todos os blocos de 3000 imagens.

redundância de dados e inconsistência dificuldade de access de isolamento de dados de dados restrições de integridade problemas de atomicidade access concorrente e anomalias (problema de segurança de updation

Para conteúdo fixo (sem alteração), como fotos, vídeos, etc., os filesystems não poderão ser dimensionados, especialmente se você tiver muitos arquivos em um diretório e o desempenho realmente sofrer. Uma opção melhor é usar a tecnologia de armazenamento de objects que armazena a imagem como um object e coloca os metadados associados no database automaticamente.

Que tal armazenar arquivos doc, pdf, xls, jpg? Qual deles é recomendado?

Eu vou trabalhar em um sistema de gerenciamento de documentos que pode armazenar 10000 arquivos, mas o problema é que eu estou muito preocupado com a disseminação de vírus se usarmos a técnica do sistema de arquivos.