Verzeichnisse mit DB abgleichen

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

  • Verzeichnisse mit DB abgleichen

    Servus alle zusammen,

    ich hab mal wieder ein kleines Problem und tappe auf der Stelle.
    Also ich würde gerne folgendes realisieren:

    Ich habe ein Verzeichnis(se) wo dokumente drin gespeichert werden.
    Ich hab mir schon einen FKT zusammen gebastelt, die die Verzeichnisse einließt.
    Nun müßte ich checken ob die Dateien schon in der DB sind oder nicht, wenn nicht sollen sie natürlich hinzugefügt werden.
    Wenn sie in den Verzeichnissen nicht mehr sind sollen sie aus der DB gelöscht werden.


    Nun stellt sich mir etwas die Frage der Performance, sollte ich schon während des einlesens der verzeichnisse überprüfen ob die Datei in der DB vorhanden ist oder das auslesen in einem Array Speichern, und dieses dann nachbearbeiten?

    So sehen die Arrays aus.

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    name] => Subfolder1
                
    [type] => dir
                
    [parent_id] => 0
                
    [id] => 1
            
    )

        [
    1] => Array
            (
                [
    name] => Subfolder3in1
                
    [type] => dir
                
    [parent_id] => 1
                
    [id] => 2
            
    )

        [
    2] => Array
            (
                [
    name] => Subfolder2
                
    [type] => dir
                
    [parent_id] => 0
                
    [id] => 1
            
    )

    )

    Array
    (
        [
    0] => Array
            (
                [
    name] => datei.sub1.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093604977
                
    [created] => 1093604414
                
    [type] => file
                
    [dir_id] => 1
            
    )

        [
    1] => Array
            (
                [
    name] => datei2.sub1.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093605237
                
    [created] => 1093604414
                
    [type] => file
                
    [dir_id] => 1
            
    )

        [
    2] => Array
            (
                [
    name] => datei2.sub3.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093605507
                
    [created] => 1093605498
                
    [type] => file
                
    [dir_id] => 2
            
    )

        [
    3] => Array
            (
                [
    name] => datei.sub3.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093605507
                
    [created] => 1093605498
                
    [type] => file
                
    [dir_id] => 2
            
    )

        [
    4] => Array
            (
                [
    name] => datei.sub2.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093604973
                
    [created] => 1093604420
                
    [type] => file
                
    [dir_id] => 1
            
    )

        [
    5] => Array
            (
                [
    name] => datei.root.txt
                
    [extention] => txt
                
    [size] => 0
                
    [last_change] => 1093604430
                
    [created] => 1093604406
                
    [type] => file
                
    [dir_id] => 0
            

    Hat jemand da einen netten und event. auch guten Denkanstoß für mich? Zur Zeit beläuf sich die anzahl der Dateien in dem Verzeichnissen auf ~200, die reader FKT braucht ca. 2 sek um die zu durchwühlen.
    Nicht jeder der viele Posts hat weiß auch viel

  • #2
    da es mehr um Ideen zur Lösung als technische Umsetzung geht verschiebe ich mal ins BS

    Kommentar


    • #3
      Ich hatte mir auch schon gedacht das ins BS zu posten, hab mich aber für das DEV entschieden

      Wie wäre denn dein Ansatz??
      Nicht jeder der viele Posts hat weiß auch viel

      Kommentar


      • #4
        ehrlich gesagt, habe ich mir bisher noch nie Gedanken drüber gemacht, da ich

        1. sowas nicht brauche
        2. immer dafür sorge, dass DB-Einträge und Existenz von physikalische Dateien immer gleich sind, dass Unstimmigkeiten nicht auftreten.

        Naja, auf die Schnelle: vielleicht alles in Array einlesen und per array_intersec prüfen und dem Ergebnis entsprechend agieren. Ist bestimmt nicht sehr performant, aber ... keine Zeit

        Kommentar


        • #5
          hmm,

          mein ansatz wäre, auf die checks zu verzichten, die db-tabelle jedesmal zu leeren, und nur die vorhandenen dateien einzutragen ....
          natürlich unter der voraussetzung, daß in der tabelle nicht noch weitere informationen gespeichert sind ...
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            Hund genau das hab ich mir auch schon überlegt, aber das ganze is ein System, was anzeigen soll wenn die dateien sich verändert haben.

            Wenn das array_intersect auch mit Mehrdimensionalen Arrays geht, dann super, aber ich habs noch net probiert
            Nicht jeder der viele Posts hat weiß auch viel

            Kommentar


            • #7
              Kann mir denn nicht irgendjemand ein paar Anstöße zu dem Thema geben????


              BITTE!!! Ich steh einfach auf der Stelle und ich zermürbe mir schon solange damit das Hirn wie ich das hinbekomme, aber vor lauter denken sehe ich den Code vor lauter $$$$$ nicht mehr.
              Es fehlt einfach der Zündfunken ...

              Also folgendes habe ich:

              - Verzeichnisse mit Dateien drin
              - Unterverzeichnisse (auch mit dateien)

              PHP-Code:
              ROOT
               
              |-+ Subdir1
               
              |-+-+ Subdir2
               
              |-+-+- File3
               
              |-+- File1
               
              |-+- File2
               
              |- File4 
              Auf folgendes will ich hinaus:

              1.) die Verzeichnisse einlesen und in einer DB Speichern
              2.) bei aufruf eines scripts soll verglichen werden was schon in der DB ist und was nicht
              2.1.) Wenn schon vorhanden soll geprüft werden ob Dateien erneuert worden sind
              2.2.) Wenn nicht mehr vorhanden raus aus der DB.


              Meine Ansätze bis jetzt:
              - Alles in ein array Lesen und dann checken (gescheitert, weil ich das Array einfach zu viele Dimensionen hatte
              - zwei Tabellen ( eine für Files eine für Dirs) // Sinnvoller beides in eine zu packen??????
              - Dir tabelle berucht auf id <-> parent_id Verfahren // NestedSets (kann ich leider nicht, bzw weiß nicht wie ich das beim einlesen machen sollte, so dass da eine Vernünftige reihnfolge bei heraus kommt


              So ich hoffe ich konnte damit erklären was ich zu machen vermag.
              Es muß hier keiner mir das ganze Script schreiben ( wäre natürlich der oberhammer ) es würde fast schon schicken mir einfach den logischen ablauf eines solchen Scripts zu verdeutlichen. Sprich wann sollte was gemacht werden ...


              Danke schon mal im Vorraus und ich hoffe das ließt hier überhaupt wer!

              Gruß JamieWolf
              Nicht jeder der viele Posts hat weiß auch viel

              Kommentar


              • #8
                wenn array zu umständlich ist, dann steht dir die DB auch noch zur Verfügung. => Daten in Temp-Tabelle rein hauen, mit LEFT, RIGHT JOIN auf NULL prüfen und ggf. bei der echten Tabelle update, insert oder delete durchführen

                Kommentar


                • #9
                  hört sich nach einem guten Ansatz an
                  Leider muß ich da schon bekennen dass bei JOINS (nicht JOINTS ) mein SQL wissen schon leicht in die brüche geht.
                  Das mit dem TEMP Tabeles sollte ich eigendlich noch hinbekommen und wenn nicht leg ich mir für das Script halt ne extra Tabelle an, die dann immer leer geräumt wird

                  @asp2php
                  Wie würde denn so ein Join statement aussehen?
                  Nicht jeder der viele Posts hat weiß auch viel

                  Kommentar


                  • #10
                    http://www.php-resource.de/forum/sho...threadid=28292

                    Kommentar


                    • #11
                      hehe gute Antwort den hab ich mir schon öfters reingezogen, aber ich bin noch nicht ganz da hinter gestiegen.

                      na ja mal sehen wie weit ich da noch komme.
                      Nicht jeder der viele Posts hat weiß auch viel

                      Kommentar


                      • #12
                        JamieWolf das was du machen willst hört sich gut an ich suche soetwas auch, kannst du mir evtl. mal ein paar Tipps geben wiedu die Daten bisheer in die DB eingespeichert hast also struktur der DB, ...

                        Kommentar


                        • #13
                          viel lesen hilft immer , wenn du beim 1. Mal nicht kappierst, vielleicht dann beim x-ten Mal aber

                          Kommentar


                          • #14
                            mgoertz klar kann ich machen

                            Aber meine DB struktur is noch nicht so das gelbe vom EI bzw. NOCH bekomme ich es nicht so ganz hin, dass die Daten in die DB gehen, aber das liegt wahrscheinlich an meiner "tollen" DB klasse

                            @asp2php
                            Ja schon, eigendlich sollte man aber nachdem man das 2875623005mal gelesen hat es verstehen. Aber ich halt net
                            Nicht jeder der viele Posts hat weiß auch viel

                            Kommentar


                            • #15
                              lesen allein hilft nicht (wirklich). du musst mal mit JOIN spielen. Zumal dass mySQL kein sub-select unterstützt (noch nicht), bist du echt auf JOIN angewiesen.

                              Na dann viel Spass beim Spielen

                              Kommentar

                              Lädt...
                              X