¿Cuál es el mejor lugar para almacenar archivos binarios relacionados con datos en su base de datos? Deberías:
- Almacenar en la base de datos con un blob
- Almacenar en el sistema de archivos con un enlace en la base de datos
- Almacene en el sistema de archivos pero cambie el nombre a un hash de los contenidos y almacene el hash en la base de datos
- Algo que no he pensado
Las ventajas de (1) son (entre otras) que se preserva la atomicidad de las transacciones. El costo es que puede aumentar drásticamente los requisitos de almacenamiento (y la transmisión / copia de seguridad asociada)
El objetivo de (3) es preservar la atomicidad hasta cierto punto: si puede exigir que el sistema de archivos en el que está escribiendo no permita que los archivos se modifiquen o eliminen, y siempre tiene el hash correcto como nombre de archivo. La idea sería escribir el archivo en el sistema de archivos antes de permitir la inserción / actualización haciendo referencia al hash; si esta transacción falla después de la escritura del sistema de archivos pero antes del DML de la base de datos, está bien porque el sistema de archivos está 'fingiendo' siendo el repositorio de todos posibles archivos y hashes: no importa si hay algunos archivos allí a los que no se apunta (y puede limpiarlos periódicamente si tiene cuidado)
EDITAR:
Parece que algunos RDBMS tienen esto cubierto de manera individual, me interesaría saber cómo lo hacen otros, y particularmente en una solución para postgres