Ich verwalte eine Anwendung, die einen Dateispeicher enthält, in dem alle Dateien mit den Dateinamen gespeichert sind, die ihren md5-Summen entsprechen. Alle Dateien werden in einem Verzeichnis gespeichert. Derzeit gibt es Tausende, aber bald sollten Millionen von Dateien auf dem Server sein. Auf dem aktuellen Server wird Ubuntu 11.10 auf einem ext4-Dateisystem ausgeführt.
Jemand sagte mir, dass es nicht ratsam ist, viele Dateien in ein Verzeichnis zu kopieren, da dies die Suchzeit und die Zuverlässigkeit erheblich erhöht (er hatte eine Geschichte über die maximalen Dateien, auf die ein einziges Verzeichnis verweisen kann, was zu einer großen verknüpften Liste führt). Stattdessen schlug er vor, Unterverzeichnisse mit zB Unterzeichenfolgen des Dateinamens anzulegen. Dies wird jedoch einige Dinge in meiner Anwendung umständlicher machen.
Trifft dies immer noch zu, oder haben moderne Dateisysteme (z. B. ext4) effizientere Möglichkeiten, damit umzugehen, und skalieren auf natürliche Weise? Wikipedia enthält einige Details zu Dateisystemen, sagt jedoch nichts über die maximale Anzahl von Dateien pro Verzeichnis oder die Suchzeiten aus.
quelle
Moderne Dateisysteme können sehr gut mit sehr großen Verzeichnissen umgehen, sogar mit Millionen von Dateien. Konventionelle Werkzeuge dagegen nicht. Zum Beispiel würde das Auflisten eines so großen Verzeichnisses mit "ls" ziemlich lange dauern, da es normalerweise das gesamte Verzeichnis lesen und sortieren würde (obwohl Sie ls -f verwenden können, um das Sortieren zu vermeiden). Es werden erst Dateien angezeigt, wenn alle gelesen wurden. Das Aufteilen der Namen hilft in einigen Fällen, aber nicht in allen Fällen (z. B. muss bei der rsync-Replikation möglicherweise immer noch der gesamte Namensbaum erfasst werden).
quelle
Könnte ich stattdessen die Verwendung einer SQL-Datenbank vorschlagen? Dies würde wahrscheinlich diese wahrgenommene Schwäche in Ihrer Anwendung in eine Stärke verwandeln.
quelle