Anzahl der Dateien pro Verzeichnis

19

Ich habe ein Verzeichnis mit ca. 100000 kleinen Dateien (jede Datei besteht aus 1-3 Zeilen, jede Datei ist eine Textdatei). In der Größe ist das Verzeichnis nicht sehr groß (<2 GB). Diese Daten befinden sich auf einem professionell verwalteten NFS-Server. Auf dem Server läuft Linux. Ich denke, das Dateisystem ist ext3, aber ich weiß es nicht genau. Außerdem habe ich keinen Root-Zugriff auf den Server.

Diese Dateien sind das Ergebnis eines groß angelegten wissenschaftlichen Experiments, über das ich keine Kontrolle habe. Ich muss jedoch die Ergebnisse analysieren.

Jede E / A-Operation / -Verarbeitung in diesem Verzeichnis ist sehr, sehr langsam. Das Öffnen einer Datei (Fopen in Python), das Lesen aus einer geöffneten Datei und das Schließen einer Datei sind alle sehr langsam. In bash ls, du usw. nicht funktionieren.

Die Frage ist:

Was ist die maximale Anzahl von Dateien in einem Verzeichnis in Linux, so dass es praktisch ist, zu verarbeiten, zu öffnen, zu lesen usw.? Ich verstehe, dass die Antwort von vielen Dingen abhängt: fs-Typ, Kernel-Version, Serverversion, Hardware usw. Ich möchte nur eine Faustregel, wenn möglich.

carlosdc
quelle
6
Ihre direkte Frage wurde von Giles gut beantwortet, aber insgesamt sind die Linux-Dateisysteme ein schlechter Ersatz für Datenbanken, wenn Sie Dateinamen als Schlüssel für winzige Datenmengen verwenden. Sie können die Generierung nicht steuern, aber Sie können die Daten in einer Form nachbearbeiten, die für die Analyse besser geeignet ist. Andernfalls zahlen Sie bei jedem Schritt den Systemaufwand für das Dateisystem. Sie können den Overhead reduzieren, sind aber möglicherweise am glücklichsten, wenn Sie ihn beseitigen.
msw
Siehe auch diese stackoverflow.com/questions/466521/…
Cristi

Antworten:

22

Wie Sie vermuten, hängt es von vielen Dingen ab, hauptsächlich vom Typ und den Optionen des Dateisystems und in gewissem Maße von der Kernel-Version. In der ext2 / ext3 / ext4-Reihe gab es eine wesentliche Verbesserung, als die dir_indexOption erschien (einige Zeit nach der Erstveröffentlichung von ext3): Verzeichnisse werden als Suchbäume (logarithmischer Zeitzugriff) und nicht als lineare Listen (linearer Zeitzugriff) gespeichert ). Das können Sie nicht über NFS sehen, aber wenn Sie Kontakt zu den Administratoren haben, können Sie sie bitten, das Programm auszuführen tune2fs -l /dev/something |grep features(vielleicht sogar davon zu überzeugen, ein Upgrade durchzuführen?). Es kommt nur auf die Anzahl der Dateien an, nicht auf deren Größe.

Trotzdem dir_indexfühlt sich 100000 groß an. Holen Sie sich im Idealfall die Autoren des Programms, das die Dateien erstellt, um eine Ebene von Unterverzeichnissen hinzuzufügen. Für ext2 oder ext3 ohne dir_indexund 20000 mit dir_indexoder reiserfs würde ich ein Limit von etwa 1000 Dateien pro Verzeichnis empfehlen, damit die Leistung nicht beeinträchtigt wird. Wenn Sie nicht steuern können, wie die Dateien erstellt werden, verschieben Sie sie in separate Verzeichnisse, bevor Sie etwas anderes tun.

Gilles 'SO - hör auf böse zu sein'
quelle