Frage

In Bezug auf Leistung und Effizienz, ist es besser, viele kleine Dateien zu verwenden (von viel ich so viel wie ein paar Millionen bedeuten) oder ein Paar (zehn oder so) große (mehrere Gigabyte) Dateien? Sagen wir einfach, ich bin den Aufbau einer Datenbank (nicht ganz richtig, aber alles, was ist wichtig ist, dass es eine Menge erreicht werden wird).

Ich bin in erster Linie mit der Leseleistung betrifft. Mein Dateisystem ist derzeit ext3 unter Linux (Ubuntu Server Edition, wenn es darauf ankommt), obwohl ich in der Lage bin, wo ich noch wechseln kann, so dass Vergleiche zwischen verschiedenen Dateisystemen fabelhaft sein würden. Aus technischen Gründen kann ich nicht eine tatsächliche DBMS für diese (daher die Frage) verwenden, so „nur MySQL verwenden“ ist keine gute Antwort.

Vielen Dank im Voraus, und lassen Sie mich wissen, ob ich präziser sein müssen.


EDIT: Ich werde viele relativ kleine Stücke von Daten zu speichern, weshalb viele kleine Dateien verwenden wäre einfacher für mich. Also, wenn ich bei der Verwendung von ein paar großen Dateien gehe, würde ich nur ein paar KB zu einem Zeitpunkt aus sie werde abruft. Ich würde auch einen Index verwenden, so das ist nicht wirklich ein Problem. einige der Datenpunkte auch auf andere Teile der Daten (in dem Lose-of-small-Dateien Fall und verweist auf die Lage der Daten in der Datei in dem großen Datei Fall auf die Datei verweisen würden).

War es hilfreich?

Lösung

Es gibt eine Menge von Annahmen hier aber, für alle Absichten und Zwecke, die Suche durch eine große Datei wird viel schneller sein als durch ein Bündel von kleinen Dateien zu suchen.

Angenommen, Sie sind Suche nach einem Text-String in einer Textdatei enthalten ist. Suchen einer 1 TB-Datei wird viel schneller als Öffnung 1.000.000 MB Dateien und durch auf der Suche sind.

Jede Datei-Öffnen-Operation braucht Zeit, . Eine große Datei nur einmal geöffnet werden.

Und bei der Betrachtung Datenträgerleistung , um eine einzelne Datei ist viel wahrscheinlicher, werden gespeichert contigously als eine große Reihe von Dateien.

... Auch diese sind Verallgemeinerungen, ohne mehr über Ihre spezifische Anwendung zu kennen.

Genießen,

Robert C. Cartaino

Andere Tipps

Es hängt davon ab. Ja wirklich. Verschiedene Dateisysteme sind in einer anderen Art und Weise optimieren, aber im Allgemeinen effizient kleine Dateien verpackt. Der Vorteil von großen Dateien ist, dass Sie nicht eine Menge Sachen zu öffnen und zu schließen haben. Öffnen und Schließen sind Vorgänge, die Zeit in Anspruch nehmen. Wenn Sie eine große Datei, die Sie normalerweise öffnen und schließen nur einmal und Sie verwenden, um Vorgänge suchen

Wenn Sie die Lose-of-Dateien Lösung gehen, empfehle ich Ihnen eine Struktur wie

b/a/bar
b/a/baz
f/o/foo

, weil Sie Grenzen für die Anzahl der Dateien in einem Verzeichnis.

Das Hauptproblem hier ist TMO über Indizierung. Wenn Sie vorhaben, Informationen in einer riesigen Datei ohne einen guten Index zu suchen, müssen Sie die gesamte Datei für die richtigen Informationen scannen, die lang sein können. Wenn Sie denken, können Sie starke Indexierungsmechanismen bauen dann in Ordnung, sollten Sie mit der riesigen Datei gehen.

Ich würde es vorziehen, diese Aufgabe zu ext3 delegieren, die es ziemlich gut sein sollten.

edit:

Eine Sache zu prüfen, nach diesem Wikipedia-Artikel auf ext3 ist, dass die Fragmentierung über geschieht Zeit. Also, wenn Sie eine große Anzahl von kleinen Dateien, die einen wesentlichen Prozentsatz des Dateisystems nehmen, dann werden Sie Leistungen im Laufe der Zeit verlieren.

Der Artikel bestätigt auch die Behauptung über 32k Dateien pro Verzeichnis Grenze (einen Wikipedia-Artikel unter der Annahme, alles bestätigen kann)

Ich glaube, Ext3 eine Grenze von etwa 32.000 Dateien / Verzeichnisse pro Verzeichnis hat. Wenn Sie die Millionen von Dateien Route gehen, müssen Sie sie in vielen Verzeichnisse verbreiten. Ich weiß nicht, was das für die Leistung tun würde.

Meine Präferenz für die mehr großen Dateien sein würde. In der Tat, warum überhaupt einige, es sei denn, sie irgendeine Art von logisch getrennten Einheiten sind? Wenn Sie immer noch nach oben, nur um zu spalten sie spalten, sage ich das nicht tun. Ext3 kann sehr große Dateien verarbeiten gut.

Ich arbeite mit einem System, das auf einem XFS-Dateisystem unter Linux auf etwa 5 Millionen Dateien gespeichert und haben keine Performance-Probleme hatte. Wir verwenden nur die Dateien zum Speichern der Daten, werden wir sie nie vollständig scannen, haben wir eine Datenbank für die Suche und eines der Felder in einer Tabelle enthält eine GUID, die wir abrufen verwenden. Wir verwenden genau zwei Ebenen von Verzeichnissen, wie oben mit den Dateinamen der guid sein, obwohl mehr verwendet werden könnten, wenn die Anzahl der Dateien bekam sogar noch größer. Wir haben wir für diesen Ansatz ein paar zusätzlichen Terabyte in der Datenbank zu vermeiden, zu speichern, die nur dann gespeichert / zurückgegeben werden müssen und nie durchsucht und es hat funktioniert gut für uns. Unsere Dateien reichen von 1k bis etwa 500k.

Wir haben das System auch auf ext3 laufen, und es funktioniert gut, aber ich bin nicht sicher, ob wir es jemals Vergangenheit über eine Million Dateien geschoben. Wir würden wahrscheinlich zu einem 3-Verzeichnissystem gehen müssen durch maximale Dateien pro Verzeichnis Einschränkungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top