Pergunta

Geralmente, quão ruim é o impacto no desempenho ao armazenar um arquivo em um banco de dados (especificamente mssql) em oposição ao sistema de arquivos?Não consigo encontrar um motivo fora da portabilidade do aplicativo para armazenar meus arquivos como varbinários no SQL Server.

Foi útil?

Solução

Dê uma olhada nesta resposta:

Armazenando imagens em banco de dados - sim ou não?

Essencialmente, o impacto no espaço e no desempenho pode ser bastante grande, dependendo do número de usuários.Além disso, lembre-se de que os servidores Web são baratos e você pode facilmente adicionar mais para equilibrar a carga, enquanto o banco de dados geralmente é a parte mais cara e mais difícil de escalar de uma arquitetura Web.

Existem alguns exemplos opostos (por exemplo, Microsoft Sharepoint), mas geralmente armazenar arquivos no banco de dados não é uma boa ideia.

A menos que você escreva aplicativos de desktop e/ou saiba aproximadamente quantos usuários você terá, mas em algo tão aleatório e inesperado como um site público, você poderá pagar um preço alto para armazenar arquivos no banco de dados.

Outras dicas

Se você puder migrar para o SQL Server 2008, poderá aproveitar as vantagens do suporte FILESTREAM, que oferece o melhor de ambos - os arquivos são armazenados no sistema de arquivos, mas a integração do banco de dados é muito melhor do que apenas armazenar um caminho de arquivo em um campo varchar.Sua consulta pode retornar um fluxo de arquivo .NET padrão, o que torna a integração muito mais simples.

Introdução ao armazenamento FILESTREAM

Eu diria que depende da sua situação.Por exemplo, trabalho no governo local e temos muitas imagens, como fotos, etc.Não temos um grande número de usuários, mas precisamos ter boa segurança e auditoria dos dados.O banco de dados é uma solução melhor para nós, pois torna isso mais fácil e não teremos problemas de dimensionamento.

Qual é a questão aqui?

O DBMS SQL2008 moderno tem uma variedade de maneiras de lidar com BLOBs que não estão apenas colados em uma tabela.Existem prós e contras, é claro, e talvez você precise pensar um pouco mais sobre isso.

Este é um artigo interessante, do falecido (?) Jim Gray

Para BLOB ou não para BLOB:Armazenamento de objetos grandes em um banco de dados ou sistema de arquivos

Na minha própria experiência, é sempre melhor armazenar arquivos como arquivos.A razão é que o sistema de arquivos é otimizado para armazenamento de arquivos, enquanto o banco de dados não.Claro, existem algumas exceções (por ex.o tão aclamado sistema de arquivos MS de próxima geração deve ser construído sobre o servidor SQL), mas em geral essa é minha regra.

Embora o desempenho seja um problema, acho que os designs modernos de bancos de dados tornaram o problema muito menor para arquivos pequenos.

Deixando de lado o desempenho, também depende de quão fortemente acoplados estão os dados.Se o arquivo contiver dados intimamente relacionados aos campos do banco de dados, então ele pertence conceitualmente a ele e pode ser armazenado em um blob.Se contiver informações que possam estar potencialmente relacionadas a vários registros ou que possam ter algum uso fora do contexto do banco de dados, então ele pertencerá a um contexto externo.Por exemplo, uma imagem em uma página da Web é obtida em uma solicitação separada da página vinculada a ela, portanto, pode pertencer a algo externo (dependendo do design específico e das considerações de segurança).

Nosso compromisso, e não prometo que seja o melhor, tem sido armazenar pequenos arquivos XML no banco de dados, mas imagens e outros arquivos fora dele.

Tomamos a decisão de armazenar como varbinary para http://www.freshlogicstudios.com/Products/Folders/ meio que esperando problemas de desempenho.Posso dizer que ficamos agradavelmente surpresos com o quão bem tudo funcionou.

Eu concordo com @ZombieSheep.Só mais uma coisa: geralmente não acho que os bancos de dados realmente precisem ser portáteis porque você sente falta de todos os recursos que seu fornecedor de DBMS oferece.Acho que migrar para outro banco de dados seria a última coisa que se consideraria.Apenas meus $ 0,02

A sobrecarga de ter que analisar um blob (imagem) em uma matriz de bytes e, em seguida, gravá-lo no disco com o nome de arquivo apropriado e depois lê-lo é um impacto de sobrecarga suficiente para desencorajá-lo de fazer isso com muita frequência, especialmente se os arquivos são bastante grande.

Não quero ser vago nem nada, mas acho que o tipo de 'arquivo' que você armazenará é um dos maiores fatores determinantes.Se você está falando essencialmente sobre um grande campo de texto que pode ser armazenado como arquivo, minha preferência seria o armazenamento de banco de dados.

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