Welche Blockgrößen für Millionen kleiner Dateien

10

Ich habe 2x 4 TB Festplatten in Hardware RAID1 (es könnte ein LSI MegaRaid sein) auf Debian Wheezy. Die physische Blockgröße beträgt 4 KB. Ich werde 150-200 Millionen kleine Dateien (zwischen 3 und 10 KB) speichern. Ich frage nicht nach Leistung, sondern nach den besten Dateisystem- und Blockgrößen, um Speicherplatz zu sparen. Ich habe eine Datei mit 8200 Byte auf eine ext4 mit einer Blockgröße von 4 KB kopiert. Dies dauerte 32 KB Festplatte!? Ist Journaling der Grund dafür? Welche Möglichkeiten gibt es also, um den meisten Speicherplatz für so kleine Dateien zu sparen?

Rabudde
quelle

Antworten:

1

Wenn ich in dieser Situation wäre, würde ich mir eine Datenbank ansehen, die alle Daten in einer einzigen Datei mit einem kompakten, Offset-basierten Index speichern kann, anstatt als separate Dateien. Möglicherweise eine Datenbank, in der ein FUSE-Treiber verfügbar ist, um bei Bedarf als Dateien mit ihm zu interagieren, ohne dass tatsächlich alle separate Dateien sind.

Alternativ können Sie beispielsweise das 60. bis 70. Perzentil der Dateigrößen betrachten und versuchen, diese Dateigröße direkt in die Baumknoten des Dateisystems einzufügen, anstatt als separate Blöcke auf der Festplatte. Das Speichern von 10.000 in jedem Knoten ist wahrscheinlich eine große Frage, aber wenn Sie 60% -70% der Dateien darin erhalten könnten, wäre das wahrscheinlich ein großer Gewinn.

Das können nur bestimmte Dateisysteme (reiserfs ist eins), und ich denke, alles hängt davon ab, wie groß dieses Perzentil ist und ob es in den Baum passt. Möglicherweise können Sie es einstellen. Ich denke, versuchen Sie, den Rest in einen Block zu passen.

Und mach dir keine Sorgen um Zeitschriften; Sie haben sowieso eine obere Größenbeschränkung.


quelle
4
Nein nein nein nein nein nein nein nein nur ... nein zu deinem 1. Absatz. Ich habe diesen Fehler vor Jahren gemacht und er musste später rückgängig gemacht werden. Ich habe auch Systeme geerbt, die dieses Entwurfsmuster verwenden. Dateien gehören in dem Dateisystem oder als Kompromiss, in einem SQL Server Filestream - Objekt , wenn Sie müssen sie kombinieren (so vielleicht Ihre FUSE - Treiber, aber immer noch nur nein). Es gibt andere Überlegungen, wenn Sie im Dateisystem arbeiten, z. B. nicht 4 Millionen Dateien in einem Ordner ablegen (ich habe diesen Fehler auch gemacht).
Mark Henderson
2
@ MarkHenderson, aber das Problem besteht darin, zu definieren, was eine Datei sein soll und was ein Datensatz sein soll. Ohne weitere Details klingen Hunderte Millionen winziger Dinge für mich VIEL mehr nach Schallplatten. Nur weil er sie derzeit als Dateien hat, heißt das nicht, dass sie so bleiben müssen oder sollten. Außerdem habe ich nie für eine Sekunde vorgeschlagen, SQL Server für den Job zu verwenden;)
2
Vor 5 Jahren habe ich ein System mit 1 Million Dateien in einem einzigen Ordner und ungefähr 10.000 neuen 1-4 KB-Dateien pro Tag geerbt. Ich habe beschlossen, sie alle in eine ISAM-Tabelle zu werfen, weil "Hey, sie sind nur einfacher Text zum Analysieren!" und dann stellte sich heraus, dass dies ein großer Fehler war, da ich jetzt eine einzelne 12-GB-Tabelle mit einer Billion Zeilen hatte, die nach der Verarbeitung meistens nichts taten. Also habe ich sie wieder in ein Dateisystem mit Erbenordnern gestellt, die auf der GUID des Dateinamens basieren.
Mark Henderson
(Warum eine einzelne 12-GB-Tabelle mit Quadullion-Zeilen ein Problem war, war eine andere Sache, auf die ich hier nicht eingehen werde)
Mark Henderson
2
@ MarkHenderson: Es ist kein anderes Problem, deshalb hast du gesagt, es sei die falsche Lösung ("... großer Fehler, weil ich jetzt eine einzelne 12-GB-Tabelle mit einer Billion Zeilen hatte ..."). Sie wählen das falsche Datenbankmodul / Tabellenformat, aber das Konzept, viele kleine Dinge mit einem INDEX in eine einzelne Datei zu packen, ist solide, solange Sie es richtig machen. Was Sie wollen, ist eine Datenbank, die sich in Schlüssel- / Wertspeichern für Millionen kleiner Objekte mit automatischem Sharding auszeichnet. Beachten Sie auch, dass er sich nicht einmal um Leistung kümmert, sondern nur um Platz.