Die Dateianhänge sollten in MongoDB gespeichert werden.
Vorteile:
Metadaten und Dateien sind leichter synchron zu halten.
bessere Skalierbarkeit durch Sharding. Dateien werden auf verschiedene Hosts verteilt, genau wie die Datenbank.
Konstante Zugriffs-Performance bei größeren Anzahlen von Dateien im System. Aktuell wird dafür das seltsame Ordner-Unterordner-Schema (z.B. /attachments/8/9/pdf296998.pdf) verwendet, um nicht zu viele Dateien in einem Verzeichnis zu halten. Das würde entfallen.
Dadurch auch automatisch einfachere URLs, weil der Teil "/8/9" im Pfad wegfällt.
Replizierung mittels MongoDB Replicasets
Versionierung
Nachteile:
Zugriff auf Dateien geht nur noch über MongoDB. Innerhalb von Python-Scripts macht das keinen Unterschied. Aber einen Zugriff via find, mv, scp, rsync, pdftotext, pdfimages oder ähnliches wird es nicht mehr geben. Abhilfe kann an der einen oder anderen Stelle mit mongofiles geschaffen werden.
Für das direkte Ausliefern der Dateien via HTTP gibt es ein nginx-Modul. Das ist wohl sehr performant, kennt aber keine HTTP-Range-Requests.
Überhaupt steigen die Anforderungen für das Ausliefern der Dateien. Ein einfacher Apache, wie ihn jeder hat, hilft nicht.
Die Dateianhänge sollten in MongoDB gespeichert werden.
Vorteile:
Nachteile: