Se eu usar meu banco de dados para dados relacionais e optar por armazenar grandes blobs binários no sistema de arquivos, como posso integrar os dois? Como funciona esse processo?
Eu sei que o banco de dados precisará armazenar um caminho/link de diretório para o blob correspondente, mas alguém pode me esclarecer sobre os detalhes? Por exemplo, acho que devo ter alguns scripts de shell para primeiro executar uma verificação de vírus no binário em um local /tmp seguro e, em seguida, movê-lo para o local de armazenamento real e atualizar o caminho no banco de dados. Mas para fazer isso a partir do sistema operacional, será necessário um script para verificar periodicamente se houve uma alteração em um diretório e, em seguida, disparar ações. É possível executar um script de shell de dentro de um banco de dados (sei que o inverso é possível)?
Ou existem ferramentas melhores para fazer esse tipo de coisa (integrar ao armazenamento do sistema de arquivos) no MySQL/Postgres?
Os 'grandes' jogadores nem colocam as imagens na mesma máquina. Em vez disso, eles têm "servidores de imagem" distribuídos globalmente e otimizados para gerar imagens somente leitura. No caso deles, os benefícios do processamento distribuído superam a inconsistência ocasional (link para imagem inexistente; vice-versa). No entanto, outras máquinas lidam com verificação de vírus, dimensionamento, remoção de EXIF, etc.
O MySQL não pode armazenar um blob maior que 4 GB (sim, você pode ( deve ) dividi-lo). Mesmo 16 MB tem alguns problemas (com replicação, ajuste, etc.) que você pode tropeçar.
Se você tiver varreduras de metadados e tiver grandes blobs nas linhas, o servidor gasta muito tempo pisando em hambúrgueres de vaca. "Particionamento vertical" é uma abordagem para evitar esse problema. Em uma implementação, comecei com uma miniatura e os dados EXIF na linha principal. Por fim, descobri o problema do "empada de vaca" e mudei para ter esses dois blobs em uma tabela paralela. Correu visivelmente mais rápido.
Eu implementei as coisas de qualquer maneira. Jogue uma moeda para decidir o que fazer. Pense em sua decisão por seis meses e, em seguida, considere mudar para o outro mecanismo. Enquanto isso, crie seu código para que você possa fazer essa alteração com o mínimo de aborrecimento.