Quais são os prós e os contras de armazenar arquivos em um database?

Estou escrevendo um aplicativo php e queria saber se é uma má idéia armazenar arquivos completos no database. Os arquivos devem ser de cerca de 100-200kb principalmente arquivos de texto (txt, doc, docx e assim por diante) ou pequenos arquivos de imagem. Ou é apenas uma simples idéia errada?

Pro: altamente portátil.

Con: você não pode fazer nada com isso usando SQL (indexação, pesquisa, etc.) e você precisará adicionar metadados em outras colunas (tipo de conteúdo, nome de arquivo, etc.) para melhorar (re) usabilidade e manutenção.

Eu não faria isso. O sistema de arquivos de disco é um sistema muito mais adequado para essas tarefas.

Vantagens:

  1. Não precisa se preocupar com permissions de gravação na loja de arquivos.
  2. Não há necessidade de tentar sincronizar arquivos no filestore com linhas no database, evitando arquivos órfãos ou links quebrados. Por exemplo, você pode excluir automaticamente arquivos de exclusão quando o conteúdo relacionado é excluído.
  3. Em determinados bancos de dados (como Oracle e SQL Server) você pode indexar arquivos e pesquisar dentro deles usando SQL
  4. Não precisa se preocupar com nomes de arquivos únicos, pastas e pode fazer o upload mais simples em alguns casos
  5. Mais fácil de proteger o access aos arquivos para que apenas usuários autorizados possam vê-los

Desvantagens:

  1. O desempenho dos arquivos de serviço muitas vezes sofre em comparação com filestore
  2. Pode levar a grandes bancos de dados. É necessário ter cuidado ao selecionar colunas binárias.
  3. Mais trabalho para vincular arquivos e servir o conteúdo – você precisa de manipuladores especializados etc.

Isso depende da situação?

  • Como os arquivos serão distribuídos?
  • Os arquivos são usados ​​de forma autônoma ou são parte de um sistema que pode ter sua própria autorização e lógica de autenticação?
  • Qual sua estratégia de backup?
  • Você precisa de replicação?
  • Você precisa suportar muitas E / S?
  • E o armazenamento em cache?

Dito isto, eu me inclino para algum tipo de sistema de arquivos para documentos em um database.

Pessoalmente, eu gosto da ideia, especialmente se o database os armazena ou você os comprime manualmente.

Entre outras coisas, significa que você não precisa se preocupar com nomes únicos para arquivos, o que economiza muita complexidade.