Mehrere XML-Dateien parallel laden?

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

  • Mehrere XML-Dateien parallel laden?

    Hallo liebe Forenmitglieder,
    ich hab ein kleines Problem und hoffe, dass ihr mir vielleicht die richtige Richtung weisen könnt....
    Auf einer meiner Websites frage ich mit simplexml_load_file externe XML-Dateien ab. Das funktioniert auch ganz prima. Jetzt kommt es aber teilweise vor, dass ich mehrere Dateien abfragen muss, also z.B.
    simplexml_load_file(file1.xml), simplexml_load_file(file2.xml), simplexml_load_file(file3.xml) usw...
    Da ich das ganze momentan in einer Schleife abarbeite, dauert die Ausführung bei mehreren XML-Dateien natürlich immer länger
    Gibt es vielleicht irgendeine Möglichkeit das ganze parallel abzuarbeiten?
    Da ich die Ergebnisse nachher "zusammensortieren" muss, müsste irgendwie sichergestellt sein, dass auch alle Dateien abgefragt wurden und die Ergebnisse in Variablen vorliegen....
    Funktioniert so was mit PHP oder von mir aus auch anderen Programmiersprachen (z.B. AJAX)? Und wenn wie wäre der Ansatz?
    Danke im Voraus

  • #2
    Hallo und willkommen im Forum,

    was genau meinst du mit parallel? Wenn du mehrere Threads im Sinn hast: Nein, das geht nicht. Wenn du an mehrere PHP-Prozesse denkst: Ja, das geht im Prinzip, wird dir aber vermutlich nicht helfen und die Sache unnötig verkomplizieren. Wenn du damit aber nur meinst, dass du bei jedem Durchlauf der Schleife einen zugehörigen Knoten aus den anderen Dokumenten abrufen willst: Ja, das geht, wenn du drei Instanzen, also pro XML-Datei ein SimpleXMLElement hast.

    Gegebenenfalls (abhängig von der XML-Struktur und deinem Vorhaben) könnte sich auch ein SAX-artiger Zugriff lohnen, denn das spart auf jeden Fall Ressourcen. Den findest du im Handbuch unter XMLReader.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Multi Threading wie in Java geht bei php nicht.
      Wie aktuell müssen die Ergebnisse denn sein? Könntest du die "auf Halde" abarbeiten? Dann könntest du einen CronJob einrichten, der die Scripte dafür aufruft.
      Wer keine Arbeit hat, der macht sich welche
      XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN

      Kommentar


      • #4
        Wie muss man sich das vorstellen? Werden die XML-Dateien bei jedem Aufruf deiner Seite jeweils komplett vom externen Server geladen? Wenn ja: Ist das notwendig? Wenn es nicht notwendig ist, dann solltest du die Dateien lokal cachen, denn vermutlich dauer einfach das Laden von der externen Quelle jeweils seine Zeit. Neben den schon anderweitig erwähnten Tipps stellt sich auch noch die Frage, inwieweit sich die Ergebnisse deiner Verarbeitung ggf. zum Caching anbieten?

        Seh grad - das wäre mit "auf Halde" arbeiten gemeint.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Du kannst via cURL parallele Requests absetzen.

          PHP: cURL - Manual
          PHP: curl_multi_init - Manual

          Grundsätzlich kann das die Ladegeschwindigkeit vor dem Verarbeiten beschleunigen, allerdings kann der Schuss auch nach hinten losgehen, wenn da eigentlich nur ein Server vor sich hin dümpelt und als langsamstes Glied zu identifizieren ist.

          In welchem Zeitfenster muss dein XML-Gedöns denn fertig sein ( Verarbeitungszeit ) ?

          Kommentar


          • #6
            Natürlich kann PHP parallele Requests absetzen. Auch ohne cURL.
            Siehe die Doku zu socket_select()
            Wir werden alle sterben

            Kommentar

            Lädt...
            X