Pergunta

Qual é a melhor maneira armazenando binário ou imagem arquivos?

  1. Base de dados Sistema
  2. Arquivo Sistema

Você poderia por favor explique, Por quê?

Foi útil?

Solução

Não há melhor maneira real, apenas um monte de comércio.

Pros do banco de dados:
1. Muito mais fácil de lidar em um ambiente de agrupamento.
2. Sem confiança em recursos adicionais, como um servidor de arquivos.
3. Não há necessidade de configurar operações de "sincronização" em ambiente equilibrado de carga.
4. Os backups incluem automaticamente os arquivos.

Contras do banco de dados:
1. Tamanho / crescimento do banco de dados.
2. Dependendo do servidor DB e do seu idioma, pode ser difícil colocar e recuperar.
3. velocidade / desempenho.
4. Dependendo do servidor DB, você precisa digitalizar os arquivos no momento do upload e exportar.


Arquivar profissionais:
1. Para instalações de servidor Web único/DB único, é rápido.
2. Capacidade bem compreendida de manipular arquivos. Em outras palavras, é fácil mover os arquivos para um local diferente se você ficar sem espaço em disco.
3. Pode variar o vírus quando os arquivos estiverem "em repouso". Isso permite que você aproveite as atualizações do scanner.

Contras de arquivo:
1. Em ambientes de servidor multi -web, requer um compartilhamento acessível. Que também deve ser agrupado para failover.
2. Requisitos de segurança adicionais para lidar com o acesso ao arquivo. Você deve ter cuidado para que o servidor da Web e/ou compartilhar não permitam a execução do arquivo.
3. Os backups transacionais precisam levar em consideração o sistema de arquivos.


Dito o acima, o SQL 2008 tem uma coisa chamada Filsestream que combina os dois mundos. Você carrega para o banco de dados e ele armazena transparentemente os arquivos em um diretório no disco. Ao recuperar, você pode extrair do banco de dados; Ou você pode ir direto para onde ele mora no sistema de arquivos.

Outras dicas

Prós de armazenar arquivos binários em um banco de dados:

  • Alguma diminuição na complexidade, uma vez que a camada de acesso a dados do seu sistema precisa apenas interface com um db e não um sistema de arquivos DB +.
  • Você pode proteger seus arquivos usando a mesma segurança baseada em permissões abrangentes que protege o restante do banco de dados.
  • Seus arquivos binários são protegidos contra a perda, juntamente com o restante de seus dados por meio de backups de banco de dados. Nenhum sistema de backup do sistema de arquivos separado é necessário.

Contras de armazenar arquivos binários em um banco de dados:

  • Dependendo do tamanho/número de arquivos, pode ocupar um espaço significativo potencialmente diminuindo o desempenho (dependendo se seus arquivos binários são armazenados em uma tabela que é consultada para outros conteúdos com frequência ou não) e criando tempos de backup mais longos.

Prós de armazenar arquivos binários no sistema de arquivos:

  • É nisso que os sistemas de arquivos são bons. Os sistemas de arquivos lidam com o desfragamento bem e a recuperação de arquivos (digamos para transmitir um arquivo de vídeo através de um servidor da Web) provavelmente será mais rápido com um db.

Contras de armazenar arquivos binários no sistema de arquivos:

  • Camada de acesso a dados um pouco mais complexa. Precisa de seu próprio sistema de backup. Precisa considerar problemas de integridade referencial (por exemplo, o ponteiro excluído no banco de dados precisará resultar na exclusão do arquivo para não ter arquivos 'órfãos' no sistema de arquivos).

Em saldo, eu usaria o sistema de arquivos. No passado, usando o SQL Server 2005, eu simplesmente armazenaria um 'ponteiro' nas tabelas DB no arquivo binário. O ponteiro normalmente seria um GUID.

Aqui estão as boas notícias se você estiver usando o SQL Server 2008 (e talvez outros - eu não sei): é incorporado o suporte para uma solução híbrida com o novo tipo de dados da Varbinária (MAX). Elas se comportam logicamente como as colunas varbinárias (max), mas nos bastidores, o SQL Sever 2008 armazenará os dados no sistema de arquivos.

Não há melhor maneira.

O que? Você precisa de mais informações?

Existem três maneiras que conheço ... uma, como matrizes de bytes no banco de dados. Dois, como um arquivo com o caminho armazenado no banco de dados. Três, como um híbrido (apenas se o db permitir, como no FILESTREAM modelo).

O primeiro é bem legal porque você pode consultar e obter seus dados na mesma etapa. O que é sempre bom. Mas o que acontece quando você tem muitos arquivos? Seu banco de dados fica grande. Agora você precisa lidar com grandes problemas de manutenção de banco de dados, como as tentativas de backup de bancos de dados que estão acima de um terabyte. E o que acontece se você precisar de acesso externo aos arquivos? Como conversões de tipo, manipulação em massa (redimensione todas as imagens, marcas d'água Appy etc.)? É muito mais difícil de fazer do que quando você tem arquivos.

O segundo é ótimo para um grande número de arquivos. Você pode armazená -los em dispositivos NAS, fazer backup de backup de forma incremental, manter seu banco de dados pequeno, etc. etc. Mas, quando você tiver muitos arquivos, começa a encontrar limitações no sistema de arquivos. E se você os espalhar pela rede, obterá problemas de latência, problemas de direitos do usuário etc. Além disso, tenho pena de você se sua rede for reorganizada. Agora você precisa executar grandes atualizações no banco de dados para alterar os locais dos seus arquivos, e tenho pena de você se algo estragar tudo.

Depois, há a opção híbrida. É quase perfeito-você pode obter seus arquivos através da sua consulta, mas seu banco de dados não é enorme. Isso resolve todos os seus problemas? Provavelmente não. Seu banco de dados não é mais portátil; Você está bloqueado para um determinado DBMS. E essas coisas ainda não estão maduras, então você pode aproveitar o processo de dentição. E quem disse que isso resolve todos os diferentes problemas?

O fato é que não há "melhor" maneira. Você só precisa determinar seus requisitos, fazer a melhor opção, dependendo deles e, em seguida, sugá -la quando descobrir que fez a coisa errada.

Eu gosto de armazenar imagens em um base de dados. Isso facilita a mudança do desenvolvimento para a produção apenas alterando os bancos de dados (sem arquivos de cópia). E o banco de dados pode acompanhar propriedades, como datas criadas/modificadas, assim como o sistema de arquivos.

Pessoalmente, nunca armazenei imagens no banco de dados para fins de desempenho. Em todos os meus sites, tenho uma pasta "/arquivos", onde posso colocar os sub-dobradores com base em que tipo de imagens vou armazenar. Então eu os nomeio na convenção.

Por exemplo, se eu estiver armazenando uma foto de perfil, eu a armazenarei em "/arquivos/perfil/" como perfil_2.jpg (se 2 for o ID da conta). Eu sempre faço uma regra para redimensionar a imagem no servidor para o maior tamanho que preciso e depois os menores, se precisar deles. Então, eu salvaria "perfil_2_thumb.jpg" e "perfil_2_full.jpg".

Ao criar regras para si mesmo, você pode simplesmente no código Chamne IMG src = "/files/perfil__thumb.jpg"

É assim que eu faço de qualquer maneira!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top