Wir möchten Millionen von Textdateien in einem Linux-Dateisystem speichern, um eine beliebige Sammlung als Service komprimieren und bereitstellen zu können. Wir haben andere Lösungen ausprobiert, beispielsweise eine Schlüssel- / Wertedatenbank, aber unsere Anforderungen an Parallelität und Parallelität machen die Verwendung des nativen Dateisystems zur besten Wahl.
Am einfachsten ist es, alle Dateien in einem Ordner zu speichern:
$ ls text_files/
1.txt
2.txt
3.txt
die auf einem EXT4 Dateisystem möglich sein sollen , die keine Begrenzung der Anzahl der Dateien in einem Ordner.
Die beiden FS-Prozesse sind:
- Schreiben Sie eine Textdatei von Web Scrape (sollte nicht durch die Anzahl der Dateien im Ordner beeinflusst werden).
- Komprimieren Sie die ausgewählten Dateien anhand der Liste der Dateinamen.
Meine Frage ist, wird das Speichern von bis zu zehn Millionen Dateien in einem Ordner die Leistung der oben genannten Vorgänge oder die allgemeine Systemleistung anders beeinflussen als das Erstellen eines Unterordner-Baums für die Dateien, in denen sie gespeichert werden sollen?
ls -l
oder irgendetwas anderes , das stat
jeden Inode im Verzeichnis s (zB bash
Globbing / Tabulatorvervollständigung) wird künstlich schneller als nach einigem Verschleiß (einige Dateien löschen, einige neue schreiben). ext4 könnte hier besser abschneiden als XFS, da XFS dynamisch Speicherplatz für Inodes im Vergleich zu Daten zuweist, sodass die Inodes meines Erachtens verstreuter sind. (Aber das ist eine reine Vermutung, die auf sehr wenig detailliertem Wissen basiert. Ich habe ext4 kaum benutzt.) Gehen Sie mit abc/def/
Subdirs.
ZipOutputStream
Handumdrehen erstellt werden, so gut wie jedes kostenlose native Linux-Dateisystem schlagen - ich bezweifle, dass Sie für IBMs GPFS bezahlen möchten. Die Schleife, um eine JDBC-Ergebnismenge zu verarbeiten und diesen Zip-Stream zu erstellen, besteht wahrscheinlich nur aus 6-8 Zeilen Java-Code.
dir_index
, die häufig standardmäßig aktiviert ist, beschleunigt die Suche, kann jedoch die Anzahl der Dateien pro Verzeichnis begrenzen.