Dateisystem für Millionen kleiner Dateien

44

Welches Linux-Dateisystem würden Sie im folgenden Szenario für die beste Geschwindigkeit wählen :

  • Hundert Millionen Dateien
  • ~ 2k Dateigröße im Durchschnitt
  • > 95% Lesezugriff
  • ziemlich zufälliger Zugriff
  • hohe Nebenläufigkeit (> 100 Prozesse)

Hinweis: Die Dateien werden in einem tiefen hierarchischen Baum gespeichert, um große Verzeichnisse zu vermeiden. Jedes Blattverzeichnis enthält ungefähr tausend Dateien.

Wie würden Sie es bewerten?

bene
quelle
3
Es sind einige zusätzliche Informationen erforderlich. Speichern Sie beispielsweise alle Dateien in einem flachen Verzeichnis oder in verschachtelten (sortierten) Verzeichnissen? Dies kann sich dramatisch auf die Leistung der Dateizugriffszeiten auswirken. Das Durchsieben von 100.000.000 Einträgen in einer "flachen" Anordnung ist unabhängig vom FS-Typ mit einem erheblichen Aufwand verbunden. Im besten Fall handelt es sich um eine Baumsuche, für die immer noch mehrere Suchvorgänge erforderlich sind, um zu Ihrer Datei zu gelangen. Wenn Sie die Dateien in Unterverzeichnisse unterteilen, wird die Zugriffszeit erheblich verkürzt, da auf jeder Ebene weniger Einträge durchsucht werden müssen.
Avery Payne
Wird seriell oder gleichzeitig auf die Datei zugegriffen?
Steve Schnepp

Antworten:

19

Hier sind einige Ergebnisse, die alle wichtigen Linux-FSes mit bonnie ++ vergleichen, die Sie als Ausgangspunkt verwenden können.

In Bezug auf zufällige Suchvorgänge gewinnt Reiser, gefolgt von EXT4, gefolgt von JFS. Ich bin nicht sicher, ob dies genau mit der Verzeichnissuche korreliert, aber es scheint, als wäre es ein Indikator. Dafür müssen Sie Ihre eigenen Tests durchführen. EXT2 schlägt bei der Dateierstellung alles ab, wahrscheinlich aufgrund des Fehlens eines Journals. Trotzdem schlägt EXT4 alles außer Reiser, den Sie aufgrund des aktuellen Status von hans reiser möglicherweise nicht verwenden möchten.

Möglicherweise möchten Sie nach Laufwerken suchen, die NCQ unterstützen, und sicherstellen, dass Ihre Installation für die Verwendung eingerichtet ist. Bei starker Suche sollte es einen Geschwindigkeitsschub liefern.

Stellen Sie schließlich sicher, dass Ihre Maschine eine Tonne RAM hat. Da die Dateien nicht oft aktualisiert werden, speichert Linux die meisten von ihnen im Cache, wenn freier Speicherplatz zur Verfügung steht. Wenn Ihre Verwendungsmuster stimmen, erhalten Sie einen massiven Geschwindigkeitsschub.

Andrew Cholakian
quelle
1
das problem von bonnie ++ ist, dass es mein nutzungsszenario nicht einmal grob testet
bene
2
Sie haben ein Problem damit, Verzeichnissuchen nicht zu testen, aber ehrlich gesagt, sollten Sie Ihre Daten lieber in einer echten Datenbank ablegen, wenn dies Ihre Drosselstelle ist. Dateisysteme funktionieren bei den kleinen Objekten, für die die meisten Datenbanken entwickelt wurden, bei
weitem
7
@ AndrewCholakian Link ist jetzt tot.
Don Scott
8

Ich stimme den meisten Aussagen von Andrew zu, mit der Ausnahme, dass ich Reiser4 oder das ältere (aber besser unterstützte) ReiserFS empfehlen würde . Wie diese Tests (und die Dokumentation für ReiserFS) zeigen, ist es genau auf die Situation ausgelegt, nach der Sie fragen (große Anzahl kleiner Dateien oder Verzeichnisse). Ich habe in der Vergangenheit ReiserFS mit Gentoo und Ubuntu ohne Probleme verwendet.

Zum Status von Hans Reiser sehe ich kein Problem mit dem Code oder der Stabilität des Dateisystems. Reiser4 wird sogar sowohl von DARPA als auch von Linspire gesponsert. Obwohl ich der Meinung bin, dass die weitere Entwicklung des Reiser-Dateisystems unbestimmt ist, kann ich nicht entscheiden, ob jemand es verwenden soll oder nicht.

Mike
quelle
3
Ich habe ReiserFS für eine lange Zeit benutzt. Eigentlich verwende ich es immer noch auf einem älteren Gentoo-Server , bei dem ich mich noch nicht um eine Neuinstallation gekümmert habe. Diese Installation ist diesen Mai 4 Jahre alt. Was ich kann Ihnen sagen , ist , dass es deutlich verlangsamt hat. Dieses Phänomen trat mit der Zeit auf allen Dateisystemen mit ReiserFS auf, die auf allen Rechnern mit solchen Dateisystemen im aktiven Lese- und Schreibbetrieb waren. Wenn Sie es also über einen längeren Zeitraum verwenden möchten, sollten Sie es behalten im Kopf. Ich habe es verlassen und benutze jetzt XFS für große Dateisysteme.
Mihai Limbăşan
3

Ich weiß, dass dies keine direkte Antwort auf Ihre Frage ist, aber in diesen Fällen denke ich, dass eine Datenbank besser geeignet ist, dies zu hosten. Kleine Dateien können im Binärformat in einer Datenbanktabelle gespeichert und bei wil abgerufen werden. Die Software, die diese Dateien verwendet, sollte dies jedoch unterstützen können ...

Jeroen Landheer
quelle
1
Was ist ein Dateisystem, wenn nicht nur eine hierarchische Datenbank? Ihr Vorschlag fügt Abstraktionsebenen, Komplexität und Software hinzu, die wahrscheinlich nicht gerechtfertigt sind. Außerdem erledigt der Besitzer der Frage seine Aufgabe mit "UNIX-Philosophie", von der ich vermute, dass Sie es nicht mögen, eher ein Windows-Typ zu sein?
Stu Thompson
3
Erstens habe ich nichts gegen Unix oder irgendetwas anderes in diesem Bereich. Es gibt große Unterschiede zwischen Dateisystemen und Datenbanken, weshalb beide Technologien entwickelt wurden. Datenbanken sind für die Arbeit mit einer großen Anzahl kleiner Entitäten konzipiert, in denen sie bessere Arbeit leisten als die meisten Dateisysteme. Ich habe nur darauf hingewiesen, dass es einen anderen Weg geben könnte, den Sie damit gehen können.
Jeroen Landheer
1
Und es ist viel einfacher, eine db-Datei zu "bereinigen / vakuumieren", als ein Dateisystem unter Linux zu defragmentieren. Die meisten / alle Fs bieten diese Funktionalität nicht an, da dies nicht erforderlich ist. Wenn man Mihais obigen Kommentar beachtet, kann man sehen, dass er nicht absolut wahr ist.
Gringo Suave
3

Jemand von Unix StackExchange hat einen Benchmark (mit Quelle) erstellt, um genau dieses Szenario zu testen:

F: Was ist das leistungsstärkste Linux-Dateisystem zum Speichern vieler kleiner Dateien (Festplatte, nicht SSD)?

Die beste Leseleistung scheint von ReiserFS zu kommen.

thenickdude
quelle
Btrfs scheint bessere oder vergleichbare Ergebnisse zu haben, außer zu löschen. Aber wie oft löschen Sie 300k-Dateien? Ich mochte RFS in der Vergangenheit, aber BTRFS könnte eine bessere Wahl für die Zukunft sein.
Gringo Suave
3

Nach meiner Erfahrung bläst ext2 ext4 für kleine Dateien aus dem Wasser. Wenn Sie sich nicht für Schreibintegrität interessieren, ist es großartig. Beispielsweise erstellt Subversion viele, viele, viele kleine Dateien, die von ext4 und anderen Dateisystemen (XFS) blockiert werden (führen Sie einen Cron-Job aus, der die Daten jede halbe Stunde mit ext4 von ext2 synchronisiert, oder lösen Sie das Problem so gut wie.)

Durch Ausführen dieser Befehle wird ext2 noch schneller (obwohl die meisten dieser Optionen das Dateisystem nach einem Absturz instabil machen, es sei denn, Sie führen die Synchronisierung vor dem Absturz aus). Diese Befehle haben fast keine Auswirkung auf ext4 mit kleinen Dateien.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure
Jason Hall
quelle
1

Ich denke ext3 (oder ext4), vielleicht wäre JFS eine gute Lösung. Ich wäre vorsichtig mit ext4 und btrfs (Dateisysteme sind schwierig - seien Sie mit Backups vorbereitet, wenn Sie die neuesten und neuesten Dinge verwenden möchten).

Es gibt auch verschiedene Parameter, die Sie während der mkfs-Zeit anpassen können, um das Dateisystem nach Ihren Wünschen anzupassen.

Ich würde es auf jeden Fall gegen XFS empfehlen . Nicht weil es ein schlechtes Dateisystem ist, aber das Erstellen / Löschen ist eine kostspielige Operation.


Verwenden Sie ein intelligentes Namensschema, um Probleme bei der Verzeichnissuche zu vermeiden. Beispiel:

<first letter of id>_<last letter of id>/<id>

oder ähnliche, kompliziertere Schemata. Dies beschleunigt Ihre Verzeichnissuche und damit die allgemeine Zugriffsgeschwindigkeit. (Es ist ein alter Unix-Trick, zurück aus V7, denke ich)


quelle
1
Was ist der Vorteil der Verwendung des ersten und des letzten Buchstabens und nicht nur der ersten n Buchstaben?
bene
Dies ist nur eines der möglichen Schemata. Ob dies von Vorteil ist, hängt vom "Schlüssel" ab, der für die Indizierung verwendet wird. Dieses spezielle Schema, auf das ich Bezug genommen hatte, bezog sich auf Anwendungen, in denen Daten zu Personen in Organisationen gespeichert waren, und auf diese Weise haben sie eine bessere Indizierung. Wie immer müssen Sie es an Ihre Daten anpassen und dann profilieren, bis Sie genaue Antworten finden :)
1

Die meisten FS werden mit mehr als 65K-Dateien in einem Verzeichnis ersticken, ich denke, das gilt immer noch für ext4. Die Reiser-Dateisysteme haben dieses Limit nicht (die Leute bei mp3.com haben dafür bezahlt). Ich bin mir über nichts anderes sicher, aber das ist eines der Verwendungsszenarien, für die ReiserFS gemacht wurde.

Ronald Pottol
quelle
1
Es ist ReiserFS, nicht RieserFS
Daniel Rikowski
Dieses Wochenende hatte ich ein Verzeichnis für ext4 mit 1000000 Dateien. Solange Sie dies nicht tun lsoder das Tab vervollständigen, funktioniert es schnell. Vermutlich wegen des Index.
Ole Tange
ext4 hat die Erweiterung dir_index, die viele Dateien in einem Verzeichnis beschleunigt.
Alfonx