Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Schneller Algorithmus um aus 1000 Dateien die neuste herauszufinden

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Schneller Algorithmus um aus 1000 Dateien die neuste herauszufinden

    Hallo!

    Kurz vorweg zur Erklärung: Es gibt 2 Server, auf Server A liegen die Dateien in Ordnern sortiert. Von denen soll immer die neuste auf Server B kopiert werden.

    Jetzt überlege ich aber, wie ich 1000 Dateien mit Hilfe von PHP nach Alter sortieren kann und dann den neusten herausfischen kann.. Alle Dateinamen in ein Array kopieren, die passenden MetaDaten der Datei auch noch mit dabei und dann das Array sortieren?? Das dauert doch bei 1000 Dateien viel zu lange, oder?

    Eine einfache "Sortiermöglichkeit" gibts ja in PHP nicht, oder?

    EDIT: Also mir würde eine Möglichkeit reichen, die funktioniert - sie muss nicht perfekt sein!

    Herzlichen Dank für die Antworten!
    Lieben Gruß,
    Olli

  • #2
    Probiers doch mal aus, 1000 Elemente zu sortieren dürfte jetzt nicht wirklich lange dauern.

    Kommentar


    • #3
      Eine einfache "Sortiermöglichkeit" gibts ja in PHP nicht, oder?
      Sortieren kann man nur Mengen, was also willst Du sortieren, wenn nicht Array-Elemente?!
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        PHP-Code:
        $ordnerpfad "./"
        $arr explode("\r\n",`find $ordner`)
        unset(
        $arr[0]); // Eintrag ".//" ist ja nützlich… 
        for($i=1;$i<count($arr);$i++)
         
        $arr[$i] = filemtime($arr[$i])
        sort($arr); 
        und dann den ensprechenden Index von $arr auswählen…

        Kommentar


        • #5
          Hi!

          Danke für die Antworten! Also diese Menge an Dateien ist kein Problem für ein PHP Script?
          Ich habe zwar schon einiges Programmiert, aber selten mit solch großen Mengen gearbeitet.
          Aber es ist ja auch so, dass eigentlich 2000 Dateien "untersucht" werden müssen, da ja beide Server vergleicht werden müssen. Aber wenn das kein Problem für PHP ist (bzw. für den PHP Server), dann sollte ich das eigentlich hinbekommen.

          Kommentar


          • #6
            Zitat von crossfader Beitrag anzeigen

            Jetzt überlege ich aber, wie ich 1000 Dateien mit Hilfe von PHP nach Alter sortieren kann und dann den neusten herausfischen kann.. Alle Dateinamen in ein Array kopieren, die passenden MetaDaten der Datei auch noch mit dabei und dann das Array sortieren?? Das dauert doch bei 1000 Dateien viel zu lange, oder? ...
            Das Einlesen der 1000 (oder 2000) Dateinamen und der dazugehörigen Metadaten dürfte länger dauern.

            Wenn du aber sowieso nur die neueste Datei benötigst, kannst du auf das Sortieren verzichten, und einfach das Änderungsdatum jeder eingelesenen Datei mit dem höchsten bisher vorgefundenen Wert vergleichen. Findest du einen höheren, wird der der Vergleichswert. Für die Prozedur musst du nur einmal alle Einträge in einer Schleife durchlaufen.
            Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

            Kommentar


            • #7
              Könntest auch ne Datenbank nutzen in der immer steht welche Datei jetzt geändert wird, oder neuer ist dann lässt sich das abgleichen einfacher und schneller gestalten.

              Kommentar


              • #8
                Du kannst aber auch Tools des Betriebssystems nutzen.

                Siehe: http://www.unix.com/unix-dummies-que...nix-linux.html
                [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
                [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

                Kommentar


                • #9
                  Schau mal hier, in dem Blogpost hat der Autor das hübsch verglichen. Kannste ja mal selbst testen, was bei dir auf dem Server am performantesten läuft.
                  I like cooking my family and my pets.
                  Use commas. Don't be a psycho.
                  [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                  Kommentar


                  • #10
                    Zitat von rudygotya Beitrag anzeigen
                    Schau mal hier, in dem Blogpost hat der Autor das hübsch verglichen. Kannste ja mal selbst testen, was bei dir auf dem Server am performantesten läuft.
                    Das sieht doch schonmal gut aus! Werde ich mir mal durchlesen, danke!

                    Eine Datenbank würde mir keine Erleichterung bringen, da ich keinen Einfluss darauf habe wann dort eine neue Datei erstellt wird. Die wird einfach zu Zeitpunkt X hochgeladen und zu Zeitpunkt Y muss ich alle neuen Dateien kennen

                    Kommentar


                    • #11
                      Zitat von crossfader Beitrag anzeigen
                      Das sieht doch schonmal gut aus! Werde ich mir mal durchlesen, danke!

                      Eine Datenbank würde mir keine Erleichterung bringen, da ich keinen Einfluss darauf habe wann dort eine neue Datei erstellt wird. Die wird einfach zu Zeitpunkt X hochgeladen und zu Zeitpunkt Y muss ich alle neuen Dateien kennen
                      Wenn das Hochladen per Script erfolgt, kann dieses sehr wohl den Upload-Zeitpunkt mitloggen. Damit liese sich das zeit- und arbeitsintensive Durchsuchen des Verzeichnisses auf seltene Fälle beschränken (wenn bspw. die Datenbank mal neu aufgebaut werden muss). Ob die Datenbank noch up-to-date ist, lässt sich bei vernünftigen Filesystemen schneller prüfen, indem man den Änderungszeitpunkt des übergeordneten Verzeichnisses abfragt.
                      Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

                      Kommentar


                      • #12
                        Ja ne!

                        Dann wäre es ja gar kein Problem. Dann hätt ich da ja in den Beginner Part gesteckt

                        Das Problem ist, dass ich keinen Einfluss darauf habe. Die Daten werden in unregelmäßigen Abständen ohne Einfluss meinerseits auf einen FTP Server geladen.
                        Also wie gesagt, es ist kein Upload Script, die Daten sind da einfach irgendwann

                        Gruß,
                        Olli

                        Kommentar


                        • #13
                          Zitat von crossfader Beitrag anzeigen
                          Alle Dateinamen in ein Array kopieren, die passenden MetaDaten der Datei auch noch mit dabei und dann das Array sortieren??
                          Ja. Allerdings kannst du die Ermittlung der Metadaten in die Vergleichsfunktion packen. Verwende
                          PHP-Code:
                          function compare_filenames_by_mtime($file1$file2)
                          {
                            return 
                          filemtime($file1) - filemtime($file2);

                          als Callback für [MAN]usort[/MAN].
                          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                          Kommentar


                          • #14
                            Zitat von php manual filectime
                            Anmerkung: Bei den meisten Unix Dateisystemen gilt eine Datei als geändert, sobald ihre Inode-Daten geändert wurden; d.h. wenn die Rechte, Eigentümer, Gruppe, oder andere Metadaten des Inodes aktualisiert werden. Siehe auch filemtime() (das ist was Sie suchen, wenn Sie Fußzeilen mit "Zuletzt Aktualisiert" für Webseiten erstellen möchten)
                            Ich hätte jetzt spontan filemtime genommen. Wenn ich das richtig verstehe, ist das das echte Datum der letzten Dateiänderung.
                            I like cooking my family and my pets.
                            Use commas. Don't be a psycho.
                            [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                            Kommentar


                            • #15
                              Zitat von rudygotya Beitrag anzeigen
                              Ich hätte jetzt spontan filemtime genommen.
                              Ich nicht. Ich habe mich erst nach Lesen deines Beitrags und Difference between Unix mtime, ctime, atime dazu entschlossen, meinen Beitrag von ctime auf mtime zu ändern. Das kann man dann wohl kaum noch als spontan bezeichnen.
                              Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                              Kommentar

                              Lädt...
                              X