dedlfix: MySQL - LOCK TABLES - Reservierungssystem

Beitrag lesen

Hi!

Das ist glaube ich schon alles so richtig und sollte klappen. Das Problem ist nur, dass ja ein anderer User, beim dem das irgendwie schneller geht, in der Zwischenzeit auch seine Reservierung durchzieht und es dann eine Überbuchung gibt, oder?

Bei Überbuchung sollte vor dem Bezahlvorgang abgebrochen werden, sonst bekommst du unter Umständen Scherereien, die sich nicht lohnen. Und ich denke, in die Richtung wird auch die Lösung gehen müssen.

Ich habe erkannt, dass man mit LOCK TABLES sowohl bei WRITE als auch bei READ andere User von allen Aktionen aussperrt. Wenn ich also während die Tabelle gesperrt ist in einem anderen Browserfenster z.B. den Termin aufrufe, in dem auch auf die Reservierungstabelle zugegriffen wird, um die Anzahl auszulesen, wartet das ab, bis die Tabelle entsperrt ist.

Ja, aber der Lock ist nur so lange aktiv, wie auch die Session andauert. Wenn die Session beispielsweise an einem Script-Ende automatisch geschlossen wird, ist auch der Lock weg.

Das ist schon irgendwie nicht so gut, weil eben die ganzen Termin-Seiten und nicht nur die Reservierung dran hängen.

Wenn, dann müsstest du nur eine Tabelle sperren. Was davon alles betroffen ist, hängt von deinem Tabellendesign ab.

In meinem Testbeispiel ist es besonders krass, weil ich zum testen sleep für 30 Sekunden genutzt habe. Wie wirkt sich das in echt aus, kann das spürbar werden.

Das heißt also, dass der Bezahlvorgang innerhalb eines Scripts abgearbeitet wird, denn ansonsten wäre der Sleep-Test nicht praxisrelevant.

Ich würde das ohne Lock machen. Wärend der eine Bezahlvorgang läuft, sind die Plätze (oder was auch immer) aus der Sicht weiterer Interessenten nicht verfügbar. Ich weiß auch nicht, wie oft es geschätzt vorkommt, dass mehrere gleichzeitig an der Limit-Grenze buchen wollen, und was es für einen Eindruck macht, wenn jemand buchen wollte, es nicht mehr geht, eine Weile später aber doch wieder. Andererseits, dass Buchungen storniert werden und dann wieder zur Verfügung stehen, ist so ungewöhnlich auch wieder nicht.

Lo!