Qual é o melhor local para armazenar arquivos binários relacionados aos dados no seu banco de dados? Você deveria:
- Armazenar no banco de dados com um blob
- Armazenar no sistema de arquivos com um link no banco de dados
- Armazene no sistema de arquivos, mas renomeie para um hash do conteúdo e armazene o hash no banco de dados
- Algo em que não pensei
As vantagens de (1) são (entre outras) que a atomicidade das transações é preservada. O custo é que você pode aumentar drasticamente os requisitos de armazenamento (e streaming / backup associado)
O objetivo de (3) é preservar a atomicidade em algum grau - se você pode garantir que o sistema de arquivos no qual você está gravando não permita que arquivos sejam alterados ou excluídos e sempre tenha o hash correto como nome de arquivo. A idéia seria gravar o arquivo no sistema de arquivos antes de permitir a inserção / atualização referente ao hash - se essa transação falhar após a gravação do sistema de arquivos, mas antes do DML do banco de dados, tudo bem, porque o sistema de arquivos está 'fingindo' sendo o repositório de todos possíveis arquivos e hashes - não importa se existem alguns arquivos que não estão sendo apontados (e você pode limpá-los periodicamente se for cuidadoso)
EDITAR:
Parece que alguns RDBMSs têm isso coberto de maneira individual - eu estaria interessado em saber como os outros fazem isso - e particularmente em uma solução para o postgres