Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Devo usar o tipo de campo blob MySQL?


Não inerentemente, mas se você tiver grandes BLOBs entupindo suas tabelas e cache de memória, isso certamente resultará em um impacto no desempenho.

Sim, esta é uma abordagem comum. Você normalmente faria algo como ter pastas nomeadas após cada tabela à qual estão associadas, contendo nomes de arquivos baseados apenas na chave primária (idealmente um número inteiro; certamente nunca algo enviado pelo usuário).

Esta é uma ideia melhor? Depende. Existem vantagens de simplicidade de implantação em ter apenas um único armazenamento de dados e não ter que se preocupar em fornecer ao usuário da Web acesso de gravação a nada. Além disso, se houver várias cópias do aplicativo em execução (por exemplo, balanceamento de carga ativo-ativo), você precisará sincronizar o armazenamento, o que é muito mais fácil com um banco de dados do que com um sistema de arquivos.

Se você usar o sistema de arquivos em vez de um blob, a questão é:você faz com que o servidor da Web o sirva apontando um Alias ​​para a pasta?
  • + é super rápido
  • + caches bem
  • - configuração extra do servidor:diretório virtual; precisa da extensão de arquivo apropriada para retornar o Content-Type desejado
  • - configuração extra do servidor:precisa adicionar Content-Disposition: attachment /X-Content-Type-Options headers para impedir que o IE rastreie HTML como parte das medidas anti-XSS

ou você serve o arquivo manualmente fazendo um script do lado do servidor cuspi-lo, como você teria que servir de um blob MySQL?
  • - é potencialmente lento
  • - precisa de um pouco de manipulação manual de If-Modified-Since e ETag para armazenar em cache corretamente
  • + pode usar os próprios métodos de controle de acesso do aplicativo
  • + fácil de adicionar cabeçalhos Content-Type e Content-Disposition corretos do script de veiculação

Este é um trade-off para o qual não há uma resposta aceita globalmente.