• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Ordnerstruktur für viele Dateien

redreggae

New member
Hallo zusammen,
ich bin an einer Community Seite in PHP am programmieren.
Es kommen hier auf Dauer sehr viele Dateien (Bilder, Videos) zusammen.
Das ganze wird erstmal nur auf einem Server laufen, ich brauch also keine Lösung für verteilte Systeme.

Meine Frage:
Gibt es irgendwelche Best Practices für die Ordnerstruktur?
Meine Überlegung ist einfach 3 Zufallzahlen von 0-255 generieren zu lassen, die die den Pfad bilden.
z.B. files/43/34/65/DATEI.ext

Wenn ich richtig rechne, hätte man so 256 hoch 3 (16.7 Millionen) mögliche Ordner. Vielleicht reichen auch 2 Unterordner. Dann könnte man 16.7 Millionen Dateien speichern und in jedem Ordner wären 256 Dateien.

Das ganze klappt natürlich nur, wenn die Zufallszahlen gleich verteilt sind.

Gibt es noch bessere Lösungen??

Danke
 
Willst du jede Datei in einen Extraordner schmeißen? Oder wofür soll das gut sein??
 
Nein, ich will nicht jede Datei in einem extra Ordner haben.
Ich brauche eine Lösung, damit später nicht zu viele Dateien in einem Ordner sind, weil ich schon öfter gelesen habe, das man nicht zu viele Dateien in einem Ordner haben sollte.
 
Das ist sicher richtig, aber eine solche Lösung halte ich für noch schlimmer, denn so verlierst du oder ein anderer Programmierer sicherlich am Ende den Überblick und das System wird nicht mehr wartbar.
Wenn die Nutzer die Dateien selbst raufladen dürfen, dann kannst du über die Benutzernamen oder IDs Verzeichnisse anlegen. Wobei die IDs oder Namen natürlich verschlüsselt sein sollten. Für jeden Nutzer kannst du dann auch wieder X-Unterverzeichnisse anlegen, bzw. diese vom Nutzer selbst anlegen lassen. Z. B. Erstellung eines Fotoalbums=neuer Ordner.
 
Dann bräuchte ich ja für jeden Benutzer einen Oberordner.
Das heißt, man hätte auch wieder sehr viele Oberordner, was ich ja vermeiden will.
Der Pfade stehen alle in der Datenbank, daher ist die Wartung meiner Meinung nach relativ unproblematisch. Vielleicht seh ich das aber auch falsch..
 
Dann musst du aber jedesmal die Datenbank ansprechen, was auch nicht gerade Trafficfreundlich ist ;-) Was meinst du mit Oberordner? Du kannst z. B. Ein Ordner User anlegen und dort dann alle Userordner einsortieren. Einen Oberordner hast du so oder so immer.
 
Mit Oberordner meine ich die einzelnen Userordner.

users/
user1/
user2/
...

Was hälst du von einer Lösung, die datumsweise arbeitet?

jahr/
monat/
tag/
userid/ oder stunde/

Danke..
 
So baust du ggf. weniger Oberordner aber unterm strich viel mehr Ordner.

Folgendes Szenario. Der User1234 wird aus deiner Community verbannt. Nun musst du alles was mit ihm zu tun hat löschen.
Überleg dir mal wie es sich bei der Ordnerstruktur users/user1...userN verhält und wie unter jahr/monat/tag/user1...userN

Und das ganze natürlich nicht nur beim Löschen. Für jede Abfrage der Bilder, Texte was auch immer müssen X-Ordner herangezogen werden. Dafür ist dann jedesmal eine Datenbankabfrage notwenig.
Habe ich aber die Ordner nach den Usern sortiert, so kann ich die Anfrage mit einer einzigen Datenbankabfrage bzw. mit keiner (Daten aus Cookie od. Verlinkung) generieren.
 
Eine Datenbankabfrage passiert sowieso, da die Dateien alle einen zufällig generierten Namen haben. Um die Datenbank zu entlasten, wollte ich später z.b. memcache installieren.
Du hast Recht, das ich beim Löschen der Dateien so Probleme bekommen kann.
Ich habe nur das Problem mit deiner Lösung, dass so pro User ein Unterordner dazukommt.

Eine Alternative wäre vielleicht immer ab dem 1000sten User wieder einen neuen Ordner zu generieren.

Also:
users/0/user0-user999
users/1/user1000-user1999

Dann wären nie mehr als 1000 Unterordner in einem Ordner.

Hmmm..ich frag mich wie die "Großen" so was regeln.
 
Das wäre eine vernünftige Lösung, wenn du z. B. nach UserIds gruppierst.
Die großen schmeißen teilweise alles in einen Ordner. Am Ende geht es mehr um die Übersichtlichkeit als um die Preformance.
 
Zuletzt bearbeitet von einem Moderator:
Zufahlszahlen für Ordner würde ich nicht verwenden. Dies führt nämlich am Anfang dazu, dass du viele Ordner mit nur einer Datei erhälst (sowie ich das verstanden habe wächst dein Datenbestand).
Ich würde eher eine maximalen Dateienanzahl pro Ordner festlegen. Wenn diese erreicht ist, werden alle neuen Dateien in einem anderen, neuen Ordner gespeichert.
Allerdings würde ich die Dateien entweder pro einzeln Benutzer gruppieren oder alle Dateien in einen Ordner packen. Solange du den Ordner nicht vollständig auslesen willst (per Script oder FTP) ist dies sehr viel einfacher zu programmieren oder übersichtlicher. Du solltest dann aber nen Script haben, mit dem du die Dateien löschen/umbennen/etc kannst, oder noch besser nen Zugriff per Shell haben. Sonst wartest du ewig auf die Dateiliste um Wartungsarbeiten per FTP durchzuführen.
 
Zurück
Oben