2012-07-02 17 views
5

Szenario: Eine Django-App generiert viele kleine Dateien, die sich auf Objekte in verschiedenen Modellen beziehen.Django-Dateisystemspeicher für große Anzahl von Dateien

Ich habe viele Suche nach der Vermeidung der Generierung einer großen Anzahl von Dateien in einem einzigen Verzeichnis, wenn Sie den Standard-Dateispeicher verwenden.

Ist django-fsfield die einzige Open-Source-Lösung dafür? Alles andere, was Sie für die Reparatur der großen Anzahl von Inodes in einem Verzeichnis empfehlen würden?

Vielen Dank!

Antwort

2

Erwägen Sie, den Inhalt in einer MongoDB-Sammlung zu speichern.

Da die Dateien klein sind, können Sie MongoDB-Dokumente mit einem einzigen binary field erstellen, der den Dateiinhalt enthält. "Klein" bedeutet in diesem Fall weniger als die MongoDB-Dokumentgröße, derzeit 16 MB.

Wenn Sie große Dateien speichern müssen, unterstützt Mongo dies mit gridfs.

Siehe auch When to use GridFS.

0

Verwenden Sie auch einen benutzerdefinierten Speicher-Manager, der, wenn eine Datei klein ist, dies in einem Datenbankmodell mit Binärfeld speichern und kleine Dateien von mehr als 16 MB speichern und keine andere Datenbank verwenden müssen.

2

Ich verwende django-castor.

django-Rizinus ist eine wiederverwendbare app für Django, die eine Back-End- Inhalt-adressierbaren Speicher liefert. Die Hauptklasse djcastor.storage.CAStorage ist eine Art von FileSystemStorage, die Dateien unter ihrem SHA-1-Digest speichert.

  • Egal wie oft die gleiche Datei hochgeladen wird, wird es immer nur einmal gespeichert werden, wodurch Redundanz eliminieren.

  • Dateinamen sind pseudozufällig und bestehen nur aus hexadezimalen Zeichen, so dass Sie sich keine Gedanken über Dateinamen-Kollisionen oder Bereinigung machen müssen.

  • django-castor Scherben Dateien im Verzeichnis Uploads auf der Grundlage ihrer verdaut; Dies verhindert Dateisystemprobleme, wenn sich zu viele Dateien in einem einzigen Verzeichnis befinden.

Verwandte Themen