Speicherstrategie..

Apache, Lighttpd, nginx, Cherokee
itconsul
Posts: 15
Joined: 2007-02-01 14:26

Speicherstrategie..

Post by itconsul » 2007-03-02 11:33

Hallo,

ich würed gerne ein paar Meinungen zu 2 verschiedenen Speicherstrategien hoeren:

ES geht darum viele tausend Bilder auf der Festplatte zu speichern.
Jeweils 4 dieser Bilder werden einem Inserat zugeordnet.

Stategie1):
Die jeweils 4 zusammen gehoerenden Bilder werden "Verzeichnisweise" gespeichert,
etwa so: /pfad/EINDEUTIGE_INSERATID/bild.gif.
Also pro Inserat-BilderSatz(4 Stueck) ein Verzeichnis.

Strategie2):
Alle Bilder werden in einem einzigen Verzeichnis gespeichert.
Der Name der Bider enthaelt die InseratId. Dadurch koennen die zusammen gehoerende Bilder aus diesem großen Bilderverzeichnis, durch eine Abfrage per php dem jeweiligen Inserat zugeordnet werden.

Meine eigentliche Frage:
Ich bevorzuge die zweite Strategie, frage mich jedoch folgendes:
Was benötigt mehr Zeit:Das anlegen von den Verzeichnissen, zum speichern pro inseratID(Strategie1), oder das herausfiltern der betreffenden Bildern aus dem einen großen Verzeichnis, dafuer jedoch ohne das anlegen von einem zusätzlichen verzeichnis pro inserat(Strategie2).?

Ich hoffe ich konnte verständlich machen, um was es mir geht.
Ich wäre dankbar fuer eure Meinung.

mfg ufh

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: Speicherstrategie..

Post by theomega » 2007-03-02 11:54

Ich würde von beiden Lösungen abraten: Gehen wir mal von sehr vielen Inseraten aus (nehmen wir mal nur als Zahl eine Mio). Bei Möglichkeit 1 haste dann 1 Mio Verzeichnisse mit jeweils 4 Dateien drin, bei Möglichkeit 2 haste 4Mio Dateien in einem Ordner. Beides ist sehr unperformant, weil beidesmal aus 1/4 Mio ein Eintrag rausgesucht werden muss.
Ich habe eine Ähnliche Situation und habe im Moment nur ugnefähr 100.000 Bilder in einem Verzeichniss und der Zugriff ist merklich langsamer als der Zugriff auf eine Datei in einem "normalen" Verzeichniss. Ich könnte das ziemlich sicher auch durhc Benchmarks belegen. Ich habe allerdings nur ReiserFS als Dateisystem ausprobiert, evtl (Aber ich glaube es nicht) ist ext3 besser.

Ich würde dir eine andere vorgehensweise empfehlen: Deine Inserate werden ja wohl eine eindeuite ID haben. Lass diese nicht bei 1 sondern direkt bei 1000 beginnen, so das das erste Inserat die Nummer 1000 bekommt. Mach dann folgendes: Erstell in einem Bilderordner folgende Ordnerstruktur

/letze_stelle/letzten_zwei_stellen/letzten_drei_stellen/letzten_vier_stellen/komplette_id/bilder.jpg

Also zum Beispiel bei der ID 86345127:
/7/27/127/5127/86345127/bild1.jpg

Hat den Vorteil: Auf jeder Ebene, außer auf der letzten existieren maximal 10 Unterverzeichnisse die sich rasend schnell ansprechen lassen. Auf der letzten Ebene werden es auch nicht viele sein: Bei den oben angenommen 1Mio wären es auch nur 10 Verzeichnisse auf dieser Ebene. Zu programmieren ist das nicht arg schwer und auch der rechenaufwand um die letzte stelle zu erhalten ist lächerlich klein.

Ich würde es auf jeden Fall so machen und bin gerade an einer MIgration meines eigenen Systems dran mit ähnlichem Vorgehen.

Ich hoffe du verstehst was ich sagen will.

Gruß
TO

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Speicherstrategie..

Post by oxygen » 2007-03-02 13:05

Ja, so ein Prinzip hab ich ihm in einem andere Thread auch schon vorgeschlagen.

@theomega: reiserfs ist mit O(log n) ist deutich performater als ext3 mit O(n). Außerdem kann ext3 nur 32k Dateien/Verzeichnisse pro Verzeichnis verwalten.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Speicherstrategie..

Post by Roger Wilco » 2007-03-02 14:19

oxygen wrote:@theomega: reiserfs ist mit O(log n) ist deutich performater als ext3 mit O(n).
Du solltest vielleicht auch schreiben, bei welchen Operationen ReiserFS einen Aufwand von O(log n) verursacht. Das ist mitnichten immer der Fall.
oxygen wrote:Außerdem kann ext3 nur 32k Dateien/Verzeichnisse pro Verzeichnis verwalten.
Das ist schlicht und ergreifend falsch.

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Speicherstrategie..

Post by oxygen » 2007-03-02 14:37

Roger Wilco wrote:
oxygen wrote:@theomega: reiserfs ist mit O(log n) ist deutich performater als ext3 mit O(n).
Du solltest vielleicht auch schreiben, bei welchen Operationen ReiserFS einen Aufwand von O(log n) verursacht. Das ist mitnichten immer der Fall.
Ich bezog mich auf die Suche einer Datei in einem Verzeichnis.
Mir ist durchaus auch bekannt, dass ext3 auch eine Baumstruktur benutzten kann, das ist aber standardmäßig nicht aktiv. Sollte man in so einen Fall wohl tun. Vgl. mkfs.ext3 -O dir_index
oxygen wrote:Außerdem kann ext3 nur 32k Dateien/Verzeichnisse pro Verzeichnis verwalten.
Das ist schlicht und ergreifend falsch.
Hast recht. Das wurde beim Schritt von ext2 -> ext3 geändert.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Speicherstrategie..

Post by Roger Wilco » 2007-03-02 14:47

oxygen wrote:Hast recht. Das wurde beim Schritt von ext2 -> ext3 geändert.
Auch ext2 unterstützt weit mehr als 2^15 Dateien pro Verzeichnis.

Siehe auch http://de.wikipedia.org/wiki/Ext2

itconsul
Posts: 15
Joined: 2007-02-01 14:26

Speicherstrategie_2....

Post by itconsul » 2007-03-02 16:42

Hallo,
und zunächst Danke fuer eure Meinungen.Ich werde die Anregung von "theomega" wohl übernehmen.
Fragt sich nur noch wie mann diese Strukktur am performantesten erstellt.

Meine erste Überlegung:
1)ID erstellen
2)dann mit substring die Verzeichnisnamen extrahieren
3)Verzeichnisse erstellen
4)Bilder speichern

Fuer Vorschlaege wie mann es performanter machen kann, bin ich dankbar?

Grüße,
mfg ufh

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: Speicherstrategie..

Post by theomega » 2007-03-03 01:27

Die Verzeichnisse vorher einmal erstellen, ist am aller einfachsten und nicht sonderlich aufwendig, du kannst dich dann in deinen Scripten drauf verlassen das die Verzeichnisse existieren. Wegen dem Dateisystem solltest du dich nochmal intensiv auseinandersetzten, wobei bei der von mir vorgeschlagenen Vorgehensweise imho das Dateisystem nicht so die Rolle spielt.

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: Speicherstrategie..

Post by outofbound » 2007-03-03 19:04

Hint:

Ein "ID" MOD "Primzahl" kann da zu sehr schönen Verteilungen führen. :)

Gruss,

Out