Zum Inhalt springen

Warteschleife richtig programmieren


Empfohlene Beiträge

Hi,

also ich habe folgendes Problem:

Ich betreibe einen Konvertierungsdienst. Dieser erzeugt, wie ihr euch sicher denken könnt, eine extrem hohe Last auf dem Server.

Ich möchte dieser immensen Last nun mit einer Queue (zu deutsch: Schlange) entgegenwirken.

Mein Überlegungen waren folgende:

Ich möchte 2 Mysql-Tabellen dafür schaffen. Eine die die laufenden Prozesse anzeigt, und eine für die Warteschlange.

Für die laufenden Prozesse habe ich mir das so gedacht.

Das ich am Anfang des Prozesses einen Eintrag in die Tabelle mache und am Ende lösche ich diesen einfach wieder.

Das ist soweit kein Problem. Jetzt kommt das erste kleinere Probleme. Was mache ich mit Leuten die während des Prozesses abbrechen?

Ich habe mir gedacht das ich einfach einen Timestamp mit logge und über einen Cronjob Prozesse die über eine Stunde gehen einfach lösche.

Das wäre zwar eine Lösung, sie ist aber zugegebenermaßen nicht sehr elegant. Gibt es eine elegantere?

Das gleiche Problem habe ich praktisch für die zweite Tabelle also für die Wartenden.

Ich habe mir das so gedacht das jeder User der nicht direkt in den Prozesse kann eine Sekunden/Minuten-Anzeige angezeigt bekommt wie lange er noch warten muss.

Das wäre auch alles noch realisierbar, aber hier ist das Problem mit den Abbrechern noch gravierender, da hier der Gesamte Betrieb lahm gelegt wird.

Wie bekomme ich es also hin das sobald ein User den Prozess abbricht er auch aus der Tabelle geworfen wird?

Mit freundlichen Grüßen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das wäre zwar eine Lösung, sie ist aber zugegebenermaßen nicht sehr elegant. Gibt es eine elegantere?

Ja, du benutzt eine Transaktion. Am Anfang startest du die Transaktion, schreibst deine Daten rein. Zusätzlich löschst du den Datensatz am Ende nicht sondern markierst ihn als erledigt und Commitest deine Transaktion, also schreibst sie fest in die DB. Falls die VErbindung abbricht wird ein Rollback ausgeführt und alles was nicht Commitet ist wieder rückgängig gemacht.

(MyISAM, der Standardtabellentyp bei MySQL, kann keine Transaktionen! Da musst du z.B. InnoDB nehmen.)

Aber ich kapiere trotzdem nicht ganz was du eigentlich genau tun willst :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke mal, du willst nur einer gewissen Anzahl von Personen erlauben, diesen Service zu nutzen...

Bette ein I-Frame ein, welches sich per Java-Script alle 15 Sekunden aktuallisiert. Bei aufruf des eingebetteten Frames muss dann ein Timestamp aktuallisiert werden. Sollte ein Timestamp älter als eine Minute sein, kannst du locker davon ausgehen, dass der User abgebrochen hat, bzw. die Abfrage beendet ist.

Auch nicht gerade ellegant, aber so habe ich ein ähnliches Problem gelöst (Allerdings nicht auf einer öffentlichen Seite - Sicherheit!)...

Gruß Zk4r

Link zu diesem Kommentar
Auf anderen Seiten teilen

Falls es in Frage kommt, wäre eine Anpassung des Prozesses am Anfang und am Ende denkbar. Dazu hätte ich zwei Vorschläge, wobei beide voraussetzen, dass sich der User zumindest auf der Webseite registriert (wenigstens solange die Verarbeitung dauert).

Variante 1: Ergebnis per Mail verschicken sobald fertig. Dann wird in jedem Fall ausgeliefert, bzw. überträgt das eben einem sinnvoll konfigurierten Mailserver.

Variante 2: Ergebnis wird zum Download angeboten, der User kann es sich nach Fertigstellung über einen begrenzten Zeitraum herunterladen.

Beide Varianten haben den Charme, dass der User zwischendrin offline gehen kann und Du nicht umständlich prüfen musst ob er noch da ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...