Hi,
mal eine theoretische Frage:
Uh oh, gefääährlich! ;-)
Wieviele Dateien bekommt man in ein Dateisystem?
Soviele wie reinpassen.
Genau: es kommt auf das Dateisystem an.
Die einzige theoretische Grenze ist das Verhältnis von Inhaltsverzeichnis, Dateigröße und Gesamtgröße der Festplatte.
Gegeben sei eine der heutigen Festplatten von 100 GB Größe. Theoretisch ließen sich dort also 100 Gigastück Dateien a ein Byte Größe lagern. Da Du die aber auch wiederfinden möchtest hast Du den Overhead eines Inhaltsverzeichnisses das Du auf der gleichen Platte speichern mußt. Die Namen im Inhaltsverzeichnis und somit die Namen der Dateien selber müssen groß genug sein jeder Datei einen individuellen Namen verpassen zu können. Mit einem 32 Bit langem Namen könntest Du also 4.294.967.296 Dateien benennen. Der nötige Platz zum Speichern betrüge dann (gesetzt ein Byte = 8 Bit) 17.179.869.184 Byte. Der Rest ist für Dich und Deine Dreisatz ;-)
Soviel zur hier recht nutzlosen Theorie (nicht ganz nutzlos: ist für CDROM/DVD durchaus wichtig)
Gibts irgendwo eine fertige Formel oder muss ich die erst selbst entwickeln?
Nein, da mußt Du Dir überall die Datenzusammensammeln und dann selber rechnen. Das schwierigste ist dabei aber wirklich nur das Zusammensammeln, aber da hilft Google.
Was macht das System langsam?
- Mehr Directoriies
- Mehr Files pro Directory
- viele gleichartige Namen
- lange Namen
- ...
Tja, das ist 'ne gute Frage. Theoretisch gibt es nirgendwo einen Unterschied (höchtens noch bei langen Namen, da dort das Parsen für's Hashing naturgemäß länger dauert und Stringparsen ist nunmal O(n), da beißt die Maus keinen Faden ab). Praktisch kommt es hier aber mal wieder auf's Dateisystem an.
Was müsste man denn noch berücksichtigen?
Journailing?
Hat es z.B. schonmal ausprobiert, seinen Linuxhost mit Dateien von ca. 2-5kB Größe vollzunuddeln?
Ich, mit ReiserFS 3.5 + normalem Journailing. Kein Problem, selbst mit einer Millionen Dateien a 10 Byte ergab es nur 10 Millionen Byte Besatz. Etwas ungünstiger sieht da der Overhead bei mittleren Dateigrößen (um die 50 kib) aus, aber nicht wesentlich. (ist auch in späteren Versionen optimiert)
ReiserFS hat dafür einen für diesen Zweck optimierten B++Tree geschrieben, der auch nicht ganz volle Blätter auffüllt.
Bilderverzeichnisse sind ja im Prinzip das gleiche...
Hast Du aber kleine Bilder! ;-)
Du kannst bei einem Problem mit kleinen Dateien und nicht dafür vorgesehenem Dateisystem auch so arbeiten, wie es früher mit Icons geschah: einen ganzen Satz auf einen Streifen, nur einen Ausschnitt davon zeigen und bei Bedarf den Bildstreifen hoch&runter bzw nach links&rechts bewegen. Das geht auch mit einer Datei, in der ein Menge kleiner Dateien hintereinander drinsitzen (mbox etc). Bei unterschiedlicher Größe der Dateien müßte ein Inhaltsverzeichnis geführt werden. Der Rest geht dann mit fseek(), ftell() usw. Es kosten ein wenig Geschwindigkeit, klar, aber bei Platzproblemen ist das die schnellste Variante.
so short
Christoph Zurnieden