Ankündigung

Einklappen
Keine Ankündigung bisher.

für jedes Event immer neuen Ordner anlegen, sinnvoll?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • für jedes Event immer neuen Ordner anlegen, sinnvoll?

    Hallo,

    ich habe ein Userbereich programmiert, indem jeder User so genannte Events hochladen kann. Zu diesen Events können mehrere Bilder/Videos hochgeladen werden.
    Ich hab das ganze so geregelt, dass für jedes neue Event ein neuer Ordner in einem bestimmten Ordner erstellt wird und in diesem die Dateien, die der User zu diesem Event hochgeladen hat, abspeichert.
    Also nach dem Format events/eventid/x.mpg-x.jpg-x.avi-......

    Nun hat mir jemand gesagt, dass diese Verwaltung bei über 1000 Events zu Performanceproblemen führt und ich deshalb alles im Ordner events/ abspeichern sollte....

    Nun wollte ich euch sozusagen nach einer Bestätigung fragen, führt es den wirklich zu Performance Problemen, wenn ich immer einen neuen Ordner anlege? Ist meiner Meinung nach viel übersichtlicher so :wink:

    Über antworten oder passender Lektüre zu diesem Thema würde ich mich freuen

    Schöne Grüße

    Matthias

  • #2
    Hallo Matthiasnet,

    wer auch immer diesen Spruch abgelassen hat, hat für meine Begriffe die Filesystem-Theorie nicht verstanden. Nehmen wir an, dass du 1000 Events hast und je Event gibt es 2 Dateien. Das bedeutet, dass in events/ 2000 Dateien residieren. Ein lstat auf ein Verzeichnis mit 2000 Dateien braucht deutlich länger als ein Zugriff auf ein Verzeichnis mit 2 Dateien. Im Single-Host-Betrieb macht sich das natürlich nicht so stark bemerkbar, aber im Cluster-Umfeld / Hoster haben dazu oft ein Konstrukt aus Webservern und NFS-Filesyservern) ist das bereits relevant. Was den Zugriff angeht: Solltest du viele Ändernde Prozesse implementiert haben - z.B. Verwalten des Events - hast du mit der Unterstruktur den Vorteil, dass immer nur derjenige Ordner exklusiv gelockt ist, dessen Event gerade bearbeitet wird.

    Kurzum: Die Strukturierung macht definitiv Sinn. Ich persönlich würde in der Datenbank auch nur den Dateinamen (der beim Upload ja brav von Sonderzeichen und sonstigen Unreinheiten (=Leerzeichen) bereinigt wurde) zum Event speichern, da sich der Pfad ja aus einem konfigurierten Base-Path (= events/) plus dessen Event-ID ergibt. So sparst du auch Platz in der DB.

    Literatur zu Filesystemen habe ich grade nicht parat, Wikipedia sollte aber sicher was zu dem Thema haben.

    Any questions?
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Mittels Mod-Rewrite und geeigneter Organisationsstruktur über DB und Skripte kannste du übers Web ja jede beliebige Verzeichnisstruktur vorgauckeln.

      Leg dir eine feste Ordnerstruktur an, meinetwegen 16 Ordner von a-f + 0-9 (Hex) und speicher dorthinein jeweils den entsprechenden md5_file() Hash. Das ist auf alle Fälle sauberer, weil du nicht ständig am Ordner anlegen bist.

      1000 User * 10 Event = 10.000, dann hast du pro Ordner knapp 60 Dateien, das ist kein Problem. Wenns doch mal mehr wird und merkbar unperformant münzt du das ganze auf 2 Anfangs(hex)buchstaben um, dann is die Wahrscheinlichkeit 1/256, dass ein Ordner eine Datei abkriegt.

      Prinzip verstanden, Vorteil eingesehen?

      Kommentar


      • #4
        Ergänzung zu Zergling: Derartige Konstrukte werden auf Clustern auch häufiger für das Ablegen von Session-Files gemacht, allerdings mit ein Zeichen langen, und beliebig tief verschachtelten Hirarchien.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design [B]before[/B] you start to write code!
        2. Discuss and review it together with [B]experts[/B]!
        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
        4. Write [I][B]clean and reusable[/B][/I] software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar

        Lädt...
        X