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.