Was ist der beste Ort zum Speichern von Binärdateien, die sich auf Daten in Ihrer Datenbank beziehen? Sollten Sie:
- In der Datenbank mit einem Blob speichern
- Speichern Sie im Dateisystem mit einem Link in der Datenbank
- Im Dateisystem speichern, aber in einen Hash des Inhalts umbenennen und den Hash in der Datenbank speichern
- Daran habe ich nicht gedacht
Die Vorteile von (1) sind (unter anderem), dass die Atomizität von Transaktionen erhalten bleibt. Die Kosten sind, dass Sie möglicherweise die Speicheranforderungen (und die damit verbundenen Anforderungen für Streaming / Backup) drastisch erhöhen
Das Ziel von (3) ist es, die Atomizität bis zu einem gewissen Grad beizubehalten - wenn Sie erzwingen können, dass das Dateisystem, in das Sie schreiben, das Ändern oder Löschen von Dateien nicht zulässt und immer den richtigen Hash als Dateinamen hat. Die Idee wäre, die Datei in das Dateisystem zu schreiben, bevor das Einfügen / Aktualisieren unter Bezugnahme auf den Hash zugelassen wird. Wenn diese Transaktion nach dem Schreiben des Dateisystems, aber vor der Datenbank-DML fehlschlägt, ist dies in Ordnung, da das Dateisystem das Repository für alle ist Mögliche Dateien und Hashes - es spielt keine Rolle, ob sich darin Dateien befinden, auf die nicht verwiesen wird (und Sie könnten sie regelmäßig bereinigen, wenn Sie vorsichtig sind).
BEARBEITEN:
Es sieht so aus, als hätten einige RDBMS dies auf ihre individuelle Art und Weise abgedeckt - ich wäre interessiert zu wissen, wie andere es tun - und insbesondere an einer Lösung für Postgres