Was ist die beste Vorgehensweise, um den Fall zu handhaben, dass zwei Kunden gleichzeitig ein Produkt hinzufügen, dessen Lagerbestand nur 1 betrug?
Muss der Warenkorbcode überprüft werden, um zu verhindern, dass einer dieser beiden Kunden dasselbe Produkt hinzufügt?
Oder muss diese Prüfung in der Zahlungsphase durchgeführt werden, indem beispielsweise eine zweite Abfrage durchgeführt wird, um zu bestätigen, dass das betreffende Produkt noch auf Lager ist (dh vom gleichzeitigen Kunden noch nicht gekauft)?
design
concurrency
locks
Mik378
quelle
quelle
Antworten:
Es gibt keine perfekte Antwort auf diese Frage und alles hängt von Details ab.
Als erste "Verteidigungslinie" würde ich versuchen, solche Situationen überhaupt zu vermeiden, indem ich Artikel, die so niedrig wie möglich sind, einfach nicht verkaufe. Ob dies möglich ist, hängt möglicherweise von der Situation und der Art der Artikel ab, die Sie verkaufen möchten. In der Firma, in der ich arbeite, werden Artikel meistens von der Website entfernt, bevor wir nicht mehr auf Lager sind. Aber wir verkaufen den gesamten Verkauf und die wenigen verbleibenden Artikel werden von unseren Verkäufern als Sonderangebote verkauft. Dies ist möglicherweise keine Option für kleine Geschäfte, insbesondere beim Verkauf von hochpreisigen Artikeln.
Die Lösung für die doppelte Überprüfung, wenn etwas in den Warenkorb gelegt wird, ist nicht sehr gut. Die Leute legen viel in Körbe, ohne jemals eine Bestellung aufzugeben. Dies kann diesen Artikel für einen bestimmten Zeitraum blockieren.
Meiner bescheidenen Meinung nach bei kleinen Aufträgen ist es daher am besten, unmittelbar vor der Zahlung, wenn die Bestellung tatsächlich aufgegeben wird, eine Endkontrolle durchzuführen. Im schlimmsten Fall müssen Sie Ihrem Kunden mitteilen, dass Sie gerade nicht mehr auf Lager sind (was bei kleinen Läden nicht so häufig vorkommt).
quelle
Ich denke, die beste Vorgehensweise besteht darin, auszuwählen, welche der folgenden Optionen für einen bestimmten Geschäftsfall besser geeignet ist :
... verhindert Konflikte, indem sie vollständig vermieden werden. Es erzwingt, dass eine Geschäftstransaktion eine Sperre für ein Datenelement erhält, bevor es verwendet wird, sodass Sie die meiste Zeit, wenn Sie eine Geschäftstransaktion beginnen, ziemlich sicher sein können, dass Sie sie abschließen, ohne von der Parallelität zurückgewiesen zu werden Steuerung...
quelle
Dies ist sowohl ein Personen- als auch ein Datenbankproblem. Das Sperren der Datenbank ist ein Kinderspiel!
Da ein Kunde niemals auschecken darf ...
Sie haben zwei grundlegende Möglichkeiten:
Sie reservieren einen Artikel für den Kunden für eine feste Zeitspanne (20 Minuten), nachdem er ihn in den Warenkorb gelegt hat - nachdem er den Lagerbestand erneut überprüft oder neu gestartet hat. Dies wird häufig verwendet, um Tickets für Veranstaltungen oder Sitzplätze von Fluggesellschaften zu kaufen.
Oder Sie sagen etwas wie "xxx normal innerhalb von 24 Stunden versandt", behalten sich aber den Lagerbestand vor, wenn sie auschecken. In diesem Fall müssen Sie ihnen gestatten, die Bestellung nach dem Auschecken zu stornieren, wenn einige Artikel auf Lager sind, andere jedoch nicht. (Grüne, gelbe und rote Lagerbestände können ebenfalls gut funktionieren, oder auf einigen Websites wird "geringer Lagerbestand" angegeben, wenn der Lagerbestand auf 1 oder 2 gesunken ist.)
quelle
Wie immer kommt es auf Ihre Anforderungen an. Wenn Sie Amazon sind und 100.000.000 Artikel pro Tag verkaufen, ist der Aufwand für die vorbeugende Prüfung und Sperrung wahrscheinlich unerschwinglich, und das Problem, dass ein Kunde pro Tag seinen Artikel nicht erhält, ist vernachlässigbar. Wenn es sich um seltene antike religiöse Ikonen handelt, die einzigartig und teuer sind, gilt wahrscheinlich das Gegenteil. Sie müssen selbst wissen, wo sich Ihr Business Case in diesem Spektrum befindet.
quelle
In unserem Fall haben wir die Nachrichtenwarteschlange zum Verarbeiten von Aufträgen verwendet und so konfiguriert, dass jeweils nur ein Auftrag nacheinander auf demselben Produkt in FIFO-Weise verarbeitet wird.
Die Einschränkung ist, dass Sie der gesamten Bestellabwicklung einen neuen Overhead hinzufügen, der die Dinge etwas verzögert.
quelle
Die beste Vorgehensweise für den Benutzer besteht offensichtlich darin, sicherzustellen, dass das zweite Hinzufügen fehlschlägt. Dies wird jedoch Ihre gesamte Website im Interesse des 0,1% -Falls verlangsamen.
Die technisch effizienteste und umsatzmaximierende Lösung besteht darin, sie zum Erfolg zu führen und dann zu versuchen, beide Aufträge später zu erfüllen - nur weil Sie gerade keinen Lagerbestand haben, heißt das nicht, dass Sie ihn nicht finden können In einem Notfall. Wenn Sie dies nicht können, muss sich jemand an den glücklichen Benutzer wenden und sich entschuldigen. Aber genau das hat in diesem Jahr vor Weihnachten zu Aufruhr geführt (dies ist nicht der einzige Artikel, der erschienen ist, also entschuldige mich bei Best Buy, aber es war der erste, den ich gefunden habe).
Ihre Aufgabe ist es , dem Unternehmen alle Optionen mit Vor- und Nachteilen vorzustellen und sie auf der Grundlage Ihrer Empfehlungen entscheiden zu lassen. Wenn sie es sich leisten können, den Ruf von Zeit zu Zeit zu verbessern, um den Umsatz zu maximieren, dann ist das fair genug. Wenn dies nicht möglich ist und der Datenverkehr so gering ist, dass Sie schnell nach doppelten Aktualisierungen suchen können, ist dies auch ihre Aufgabe.
quelle