Qual è il posto migliore per l'archiviazione di file binari correlati ai dati nel database? Dovresti:
- Archiviare nel database con un BLOB
- Archiviare sul filesystem con un collegamento nel database
- Archivia nel filesystem ma rinomina in un hash del contenuto e archivia l'hash nel database
- Qualcosa a cui non ho pensato
I vantaggi di (1) sono (tra gli altri) la preservazione dell'atomicità delle transazioni. Il costo è che potresti aumentare notevolmente i requisiti di archiviazione (e streaming / backup associati)
L'obiettivo di (3) è preservare l'atomicità in una certa misura - se riesci ad imporre che il filesystem su cui stai scrivendo non consente di modificare o cancellare i file e ha sempre l'hash corretto come nome file. L'idea sarebbe quella di scrivere il file nel filesystem prima di consentire l'inserimento / l'aggiornamento facendo riferimento all'hash - se questa transazione fallisce dopo la scrittura del filesystem ma prima del DML del database, va bene perché il filesystem 'finge' di essere il repository di tutti possibili file e hash - non importa se ci sono alcuni file che non vengono indicati (e potresti pulirli periodicamente se stai attento)
MODIFICARE:
Sembra che alcuni RDBMS lo coprano nei loro modi individuali - sarei interessato a sapere come lo fanno gli altri - e in particolare in una soluzione per postgres