Lösung für Problem mit aufwendiger Datenverarbeitung

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

  • Lösung für Problem mit aufwendiger Datenverarbeitung

    Hallo,

    habe folgendes Problem:

    Verarbeite ein Array mit >20.000 Einträgen. Entweder das Script bricht ab, oder -ja nach Serverconfig- stoppt das Script nach x Sekunden.

    Suche nach einer Lösung wie sich das ganze möglichst sicher verarbeiten lässt. Bin eher Einsteiger in Sachen PHP.

    Schön wäre auch die Möglichkeit eine Fortschrittsanzeige zu haben. Hoffe mein Problem kann nachvollzogen werden.

    Danke schonmal für euere Hilfe.

    Grüße

  • #2
    Zitat von aberultra Beitrag anzeigen
    Hoffe mein Problem kann nachvollzogen werden.
    Nicht ganz. Was genau passiert mit den Daten?

    Zitat von aberultra Beitrag anzeigen
    Entweder das Script bricht ab, oder -ja nach Serverconfig- stoppt das Script nach x Sekunden.
    Und du hast keine Möglichkeit die Config zu ändern?

    Kommentar


    • #3
      Hallo und willkommen im Forum,

      wo kommt denn das Array her? Am verfügbaren Speicher kann man, außer auf einem eigenen Server, meist nicht viel machen. Die Scriptlaufzeit kann man zwar beeinflussen, aber im Webumfeld macht das dann irgendwann keinen Sinn mehr. Du musst also das Datenhandling ganz anders anpacken.

      Wie genau, lässt sich nur entscheiden, wenn du uns die Herkunft der Daten erläuterst.

      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


      • #4
        Danke für eure Antworten!

        Ich versuchs mal näher zu erläutern: ich habe aktuell im beispiel eine textfile mit ca. 20.000 Domains. Diese wird mit file() ausgelesen und in ein Array geschrieben.

        Jetzt möchte ich mit jeder Domain mittels einer Schleife eine Funktion ausführen. Und die resultierenden Daten speichern.

        Wie läuft das zum Beispiel bei einem Webcrawler, einer Suchmaschine? Denke da läuft ja kein Script non Stop sondern verarbeitet Daten auch Schrittweise.

        Suche eben nur den entscheidenden Knackpunkt wie sich sowas realisieren lässt. Näher einlesen bzw. damit befassen muss ich mich anschließend sowieso, weis aber nicht wo ich hier ansetzen muss.

        Beste Grüße

        Kommentar


        • #5
          Schritt 1: Nutze eine Datenbank. Schreib dir für die Datei ein Import-Script. Dann kannst du das notfalls mit LIMIT und in mehreren Schritten machen.
          Jetzt möchte ich mit jeder Domain mittels einer Schleife eine Funktion ausführen. Und die resultierenden Daten speichern.
          Was meinst du mit einer Schleife für jede Domain? Was für eine Funktion wird dann ausgeführt?

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Hmmm, ne db statt textfile wär ned schlecht. Script dann per cronjob alle paar minuten anstupsen und immer nur eine begrenzte anzahl domains abarbeiten.
            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


            • #7
              Zitat von aberultra Beitrag anzeigen
              Denke da läuft ja kein Script non Stop sondern verarbeitet Daten auch Schrittweise.
              Wenn du dich da mal nicht irrst…
              [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


              • #8
                Zitat von Quetschi Beitrag anzeigen
                Hmmm, ne db statt textfile wär ned schlecht. Script dann per cronjob alle paar minuten anstupsen und immer nur eine begrenzte anzahl domains abarbeiten.
                Erklär doch bitte mal die Sache mit den Schleifen und der Funktion. Ich vermute da einen gewaltigen Engpass.

                Peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Frage hier für jede Domain Informationen über eine API ab (Beispielsweise Backlinkanzahl über die Yahoo-API) und erhalte für jede Domain einen Rückgabewert.

                  Würde aber auch darüber hinaus gerne Anwendungen schreiben die eben größere Datenmengen / Informationen scrapen. Benötige hier halt eine Lösung wo man den aktuellen Status (was das Script gerade so macht) im Browser beobachten kann und auf der anderen Seite soll es möglichst Absturz / Abbruchssicher sein, was bei einfachen Schleifen ja sehr schnell komplex wird und der Server (auch nach einer gewissen nicht-Antwortszeit des Scripts -was ja normal ist wenn man größere Datenmengen handelt-) dann abbricht.

                  Danke für euere Antworten!

                  Kommentar


                  • #10
                    Mach es so. Hol dir alle Informationen, die nicht bei drei auf den Bäumen sind. Die schreibst du dann in deine Datenbank und wertest sie später aus. Alles auf einmal zu machen, ist sicher sehr unperformant. Und wenn du aus welchen Gründen auch immer die Infos nicht bekommst, so setze bei der Domain ein Flag und probier es später noch mal.

                    Peter

                    PS. Was hast du eigentlich vor?
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      Zitat von Kropff Beitrag anzeigen
                      Mach es so. Hol dir alle Informationen, die nicht bei drei auf den Bäumen sind. Die schreibst du dann in deine Datenbank und wertest sie später aus. Alles auf einmal zu machen, ist sicher sehr unperformant. Und wenn du aus welchen Gründen auch immer die Infos nicht bekommst, so setze bei der Domain ein Flag und probier es später noch mal.

                      Peter

                      PS. Was hast du eigentlich vor?
                      Das heißt ich schreibe ein script das domain und alles resultierenden Werte in eine Datenbank schreibt.

                      Wie regele ich hier aber das Problem, dass das Script nach 60 Sekunden noch nicht fertig ist, und bei den meisten Servern eine Response Time von 60 Sekunden nicht überschritten werden darf?

                      Was ich vor habe... Da müsste ich sehr weit ausholen. Dreht sich grob im Bereich Suchmaschinenoptimierung. Ich möchte halt von einer Vielzahl an Domains verschiedene Suchmaschinen relevante Daten abfragen und diese dann -wie auch immer- auswerten. Das ist aber dann wieder eine andere "Baustelle"

                      Grüße

                      Kommentar


                      • #12
                        Zitat von aberultra Beitrag anzeigen
                        Wie regele ich hier aber das Problem, dass das Script nach 60 Sekunden noch nicht fertig ist, und bei den meisten Servern eine Response Time von 60 Sekunden nicht überschritten werden darf?
                        Ergänz z.B. deine Domain-Tabelle und eine Spalte namens "indiziert". Die werden am Beginn deines Scriptes alle auf false gesetzt. Dann grast du alle Domains ab und wenn die Daten erfasst wurden, setzt du "indiziert" auf true. Dann kannst du dich im nächsten Schritt auf die Domains konzentrieren, bei denen "indiziert" immer noch auf false steht. Ggf. schreibst du noch die Zeiterfassung in eine weitere Spalte, so kannst du Domains mit grottenlahmer Verbindung Stück für Stück aussortieren.

                        Peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          Danke für den Tipp!

                          Das heißt aber, dass ich das Script öfters ausführen (/ausführen lassen muss, mittels cronjob etc) muss.

                          Das mit der Zeit ist hinfällig, da ich hier eine externe Seite -immer die gleiche-, im Endeffekt nur abfrage, was diese über Domain X weiß. Die Domains selbst werden dabei gar nicht aufgerufen.

                          Gibt es keine Möglichkeit, das ganze irgendwie zu Clustern, dass ich quasi immer nur 10 Stück abfrage, das Script gibt eine Statusmeldung zurück und startet so gesehen wieder von vorn mit den nächsten 10, und so weiter, bis alles erledigt ist?

                          Viele Grüße

                          Kommentar


                          • #14
                            Zitat von aberultra Beitrag anzeigen
                            Gibt es keine Möglichkeit, das ganze irgendwie zu Clustern, dass ich quasi immer nur 10 Stück abfrage, das Script gibt eine Statusmeldung zurück und startet so gesehen wieder von vorn mit den nächsten 10, und so weiter, bis alles erledigt ist?
                            Das ist so schwer zu sagen. Wenn du mittendrin auf einen grottenlahmen Server stößt, ist hängen im Schacht. Du kannst das möglicherweise mit dem Neuaufruf des Scriptes umgehen. Du setzt zu Beginn einen timestamp und wenn der einen bestimmten Wert überschritten hast, so ruft du das Script mit header und Location neu auf. Dabei übergibts du dann die entsprechenden Parameter und es läuft erneut. Allerdings habe ich keine Ahnung, wie das bei cronjobs funktioniert. Das habe ich noch nie gemacht und darum fehlen mir die Erfahrungswerte. Probier es einfach mal aus.

                            Peter

                            PS: Lass dein Script notfalls mehrmals pro Nacht durchlaufen.
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Guten Morgen,

                              werde das heute mal probieren so, wie vorgeschlagen, aufzusetzen. Wie schaffe ich es während des Scriptdurchlaufes Inhalt direkt auf der Seite zu aktualisieren. (Zum Beispiel hier: X4d Data Center Position Check, hat eine Positionsabfrage und gibt immer einen Statuswert zurück, bzw. liefert zu jeden Datacenter sofort nach Abfrage ein Ergebnis dazu)?

                              Grüße

                              Kommentar

                              Lädt...
                              X