Ankündigung

Einklappen
Keine Ankündigung bisher.

Script immer wieder durchlaufen lassen - Ideen

Einklappen

Neue Werbung 2019

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

  • Script immer wieder durchlaufen lassen - Ideen

    Hallo,

    ich habe folgendes Problem:

    über ein PHP Script requeste ich XML Daten, die ich in eine MySQL speichere.
    Funktioniert ohne Probleme, problematisch ist nur die Menge.

    Insgesamt habe ich 17.000 Identifikationsnummern, zu denen ich Informationen abrufe, kann aber pro Aufruf maximal 20 davon abrufen. Momentan habe ich das ganze über einen Cronjob geregelt, der halt dementsprechend 850 mal nacheinander läuft und lasse das Script immer wieder neue 20 Daten abfragt. Da die Tendenz zu noch mehr IDs geht, würde ich gerne einen anderen, vielleicht geschickteren Weg gehen, stehe aber etwas auf dem Schlauch was die Lösungsfindung angeht.

    Worüber ich momentan nachdenke ist eine Schleife die solange läuft bis keine Daten mehr in Tabelle 1 stehen, die Daten in Tabelle 2 schreibt und das ganze dann umgekehrt wieder macht. Das Script soll ständig laufen.

    Vielleicht hat jemand einen besseren Vorschlag / Idee wie ich das lösen könnte?

    Für jede Hilfe bin ich auf jeden Fall sehr dankbar!


  • #2
    Da wird die Frage erlaubt sein, warum Du glaubst, dass PHP hier die richtige Technologie ist.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Was erachtest du als Sinnvoller?

      Kommentar


      • #4
        Laravel hat seit ein Queue-Improvement das vielleicht hilfreich ist (keine Ahnung, ich werf das jetzt einfachmal in den Raum :P ) (http://laravel.com/docs/releases "Daemon Queue Workers")

        Kommentar


        • #5
          Sieht tatsächlich interessant aus, werde ich mir mal genauer anschauen!

          Danke!!!

          Kommentar


          • #6
            Zitat von baao Beitrag anzeigen
            ... , kann aber pro Aufruf maximal 20 davon abrufen.
            Warum ist das so?
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar


            • #7
              Zitat von rkr Beitrag anzeigen
              Warum ist das so?
              Ist leider eine eingebaute Begrenzung seitens des Anbieters. Absolut nervig und nicht daran zu rütteln...

              Kommentar


              • #8
                Was für eine Art Begrenzung ist das? X pro Zeitraum Y?

                Was ist eigentlich das Kernproblem? Ich lese da bislang nur raus "n viele IDs sollen abgefragt werden. Kann nur n pro Durchlauf."

                - Muessen die IDs regelmaeßig abgefragt werden? Wie haeufig muss jede ID abgefragt werden?
                - Wie schnell waechst der Datenbestand an?

                Amazon? MWS?
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Parallele Requests könnten da schon mal abhilfe schaffen, wenn die API die du da ansteuerst das nicht unterbindet und dafür genügt curl. Daemons machen nur dann Sinn wenn die API zumindest parallele Requests ermöglichen und du wirklich permanent Daten abholen willst ( pausenlos ) und der Daemon nicht überwiegend mit idlen beschäftigt ist. Andernfalls reicht ein Cronjob völlig.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Genau, MWS.
                    Es gibt die Begrenzung auf Menge pro Request und eine pro Stunde.
                    Ein Teil der Daten wird in fast Echtzeit aktualisiert (ca. 500 Stück - 25 x 20 - / Minute) den Rest schicke ich in 20er Paketen, alle 5 Sekunden ein Paket. Der Datenbestand wird in den nächsten Tagen von 17000 auf 50.000 steigen, das Request pro Stunde Limit steigt aber mit und sollte kein Problem darstellen. Die 500 Echtzeit Daten sollen auf ca. 3500 anwachsen, die restlichen 50000 Daten würde ich gerne zumindest binnen einer Stunde, besser einer halben, einmal durch haben. Die Daten werden mit curl abgeholt, parallele Anfragen sind möglich.

                    Ich teste gerade eine Variante in der ich das Script wie oben geschrieben einfach ständig wiederholen lasse. Klappt eigentlich auch gut, aber es sollte eine Möglichkeit geben das ganze schneller und Ressourcensparender ablaufen zu lassen. Und das ist im Grunde das Kernproblem/die Kernfrage... Die Sache mit Daemons hört sich auf jeden Fall interessant an.

                    Kommentar


                    • #11
                      Vergiss das mit den Demons. Mach das so: Klassifiziere die Produkte nach "wichtig", "weniger wichtig", "eher unwichtig" und lege eine neue Tabelle an, in der du die Zeitstempel „des letzten Abrufs“ hast. Dann rechnest du aus, wie viele Requests du pro Minute machen kannst. Wenn du den Wert hast, fuellst du die verbleibende Zeit nach jedem Request bis zum naechsten mit einem Sleep auf. So kommst du auf die ideale Anzahl an Requests pro Minute. Das Script wird jede Minute gestartet. Dabei holst du dir immer so viele Datensaetze, wie maximal pro Durchlauf verarbeitet werden sollen. Sortiert nach Zeitstempel, aufsteigend - dadurch ziehst du dir immer die Aeltesten zuerst. Der Zeitstempel wird nach jedem erfolgreichen Abruf auf NOW() gesetzt. Du ziehst dir bei jedem Durchgang viele wichtige, einige weniger wichtige und wenige unwichtige und shuffl‘st die.

                      Um zu verhindern, dass 2 Scripte parallel laufen koennen, kannst du ein file-based Lock einbauen. Das Skript selbst kann dann so viele Datensaetze greifen, wie es will. Wenn es jede Minute wieder gestartet wird, dann kann es problemlos Daten fuer 20 Minuten verarbeiten.
                      Standards - Best Practices - AwesomePHP - Guideline für WebApps

                      Kommentar


                      • #12
                        Hab es jetzt sehr ähnlich wie du geschrieben hast gemacht, funktioniert sehr gut!
                        Vielen Dank Allen für die Hilfe!

                        Kommentar

                        Lädt...
                        X