Hallo.
So nach einigen anderen Fragen kommt hier eine neue Frage.
Wie bereits einige Wissen geht es um eine Auktionsseite bei Leute Coins haben und diese bieten können auf ein Produkt. Nebenbei läuft ein Countdown runter. Ist die Zeit abgelaufen, bekommt der, der zuletzt geboten hat, das Produkt.
Folgende Angaben werden bei der Auktion gemacht:
Countdown
Bidcounter
Wer hat zuletzt geboten?
Es gibt ein altes System das unter der Datenbankbelastung zusammengebrochen ist. Nun möchte ich gerne die Last von der Datenbank nehmen und die Auktionen über den Cache (PHP 5.3 - APC) laufen lassen.
Am Ende der Auktion wird dann in die Datenbank(PostgreSQL) geschrieben. Das könnte man auch alle 10 Gebote machen, so ist die DB-Belastung nicht so hoch und man hat ein wenig mehr Datensicherheit.
Wie sorge ich dafür das alle den aktuellen Bidcounter-Stand haben und wer zuletzt geboten haben?
Mein Lösungsansatz: Jede Sekunde wird ein Ajax Request abgeschickt der die Daten aus dem Cache holt und anzeigt das ist natürlich sehr anstrengend für den Server aber anders geht es denke ich nicht.
Wie bilde ich das Auktionssystem im Cache ab?
Mein Lösungsansatz: 2 Arrays.
1. Array speichert Arrays mit AuktionsID, Endzeit(Timestamp), Bidcounter
2. Array bekommt bei jedem Klick auf Biete ein array über array_push mit Auktionsid, Userid, Timestamp
Jedes mal wird Array 1 verglichen ob die Endzeit schon erreicht wurde, wenn nicht, erhöhe Bidcounter und Füge Array 2 ein Array mit AuktionsID, Userid und timestamp hinzu.
Verbesserungsvorschläge?
Jetzt kommt der Knackpunkt! Wie behebe ich das Concurrency-Problem? Was passiert wenn zwei Leute zum genau selben Zeitpunkt in die Arrays schreiben wollen?
Beste Grüße, Phil