Pergunta

Qual é a melhor prática para armazenar uma grande quantidade de dados de imagem no SQL Server 2008? Estou esperando para armazenar cerca de 50.000 imagens usando cerca de 5 GB de espaço de armazenamento. Atualmente eu estou fazendo isso usando uma única tabela com as colunas:

ID: int/PK/identity
Picture: Image
Thumbnail: Image
UploadDate: DateTime

Estou preocupado porque em cerca de 10% da minha capacidade total esperado, parece que as inserções estão tomando muito tempo. A imagem típica é de cerca de 20k - 30k. Existe uma melhor estrutura lógica para armazenar esses dados? Ou eu preciso de olhar para agrupamento ou alguma outra solução de TI para acomodar a carga de dados?

Foi útil?

Solução

Image é um tipo de dados obsoleto no SQL Server 2008. Ele foi substituído por VARBINARY(MAX) desde SQL Server 2005. Se você decidir armazenar a imagem no DB, então você deve usar campos VARBINARY(MAX) e considere adicionar a opção FILESTREAM.

Para streaming de dados, como imagens, FILESTREAM é muito mais rápido do que VARBINARY(MAX) sozinho, de acordo com este white paper :

Filestream vs. varbinary (max) performance
(fonte: microsoft.com )

Note que, para alcançar este desempenho de streaming você deve usar a API adequada em seu projeto e obter o alça Win32 do BLOB . Observe que as atualizações em uma coluna FILESTREAM (incluindo INSERTS) será mais lento do que VARBINARY(MAX).

Outras dicas

Para DB ou não DB, que é a questão.

Você está começando uma guerra religiosa aqui com imagens no DB.

A opinião seria dividida para SQL 2000, mas 2005 e acima fazer um trabalho bastante decente de armazenar blobs - olhar apenas no número de instalações do SharePoint que usam MS SQL Server como seu armazenamento. Gostaria apenas de ir por esse caminho para armazenamento de imagens menores.

Se você acabar colocando-os no DB, eu diria que você deve separar a imagem a partir dos dados a ela associados para a facilidade de consulta e reduzir o seu IO e os casos em que os desenvolvedores a escrever SELECT * (e sim, eles vão ).

Confira FILESTREAM no SQL 2008 -. Que se entende por coisas como esta

Aqui estão alguns outros pontos no DB sistema vs. arquivo que você pode querer considerar:

  • armazenamento DB, backups, restauração, licenciamento de manutenção é caro
  • Armazenamento em DB é harded para chegar a do que no disco
  • Disk pode ser acelerado
  • Você precisará escrever código para obter / imagens conjunto em DB - não necessários para o disco

Confira o novo Filestream apresenta no SQL Server 2008. essencialmente, permite armazenar blob (leia-se: imagem) de dados no banco de dados, sem a sobrecarga de ter que ler os dados em buffers SQL em cada ler e escrever. É perfeitamente usa o filesytem para armazenar seus arquivos grandes em vez de páginas SQL. Isso pode levar a muito mais rápido ler e escrever vezes para arquivos maiores e, melhor de tudo, uma vez que tudo isso acontece sob o capô, você não precisa alterar quaisquer procedimentos armazenados existentes para trabalhar com colunas FILESTREAM. Consulte aqui para exemplos de código e alguns perfis de desempenho.

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