Ich bin während der Entwicklung auf ein solches Problem gestoßen Ein auf 100 aktualisierter Video-Wiedergabedatensatz bedeutet, dass das Video angesehen wurde, und wird bei nachfolgenden Anfragen nicht aktualisiert. sich herausstellen: Daher sind viele der darin enthaltenen Daten problematisch. Es wird spekuliert, dass die folgenden Umstände dazu führen werden, Die erste Anforderungstransaktion wird ausgeführt und wurde noch nicht festgeschrieben (da die lokale Reproduktion manchmal schwierig ist, schlafe ich das Programm bei der Verarbeitung des ersten Datensatzes manuell einige Sekunden lang, um diesen Effekt zu erzielen). Die Ausführung der zweiten Anforderungstransaktion wurde begonnen. Zu diesem Zeitpunkt beträgt der gefundene historische Maximalwert nicht 100 und wird daher aktualisiert. Ich habe im Internet nach der Lösung gesucht: Pessimistische Sperre Direktes Sperren von Zeilendatensätzen Ich habe das lokal getestet und es funktioniert wirklich. Eine Transaktion wird gestartet, aber nicht beendet, und die zweite Transaktion wartet. Aufgrund der Systemparallelität wird es jedoch zu einem Blockierungszustand kommen. Ich wage es nicht, darüber nachzudenken, also zeichne ich diese Methode einfach auf. Manuelle Simulation: Führen Sie die erste Transaktion aus: -- Video 100 BEGINNT; Wählen Sie * aus `biz_coursestudyhistory`, wobei sid = 5777166; UPDATE biz_coursestudyhistory setze studyStatus = 100,versionNO=versionNO+1, wobei sid = 1 UND versionNO = 0; - commit; Nicht zuerst ausführen, zuerst kommentieren und nur das oben genannte ausführen Führen Sie dann die zweite Transaktion aus: BEGINNEN; UPDATE biz_coursestudyhistory setze studyStatus = 90,versionNO=versionNO+1, wobei sid = 1 UND versionNO = 0; Wählen Sie * aus `biz_coursestudyhistory`, wobei sid = 1 für Update ist; BEGEHEN; Sie werden feststellen, dass Ihnen kein Erfolg gelingt und Sie sich immer in einem Wartezustand befinden. Schlösser ansehen Es ist tatsächlich gesperrt. Hier wird die zweite Transaktion ausgeführt, solange das Commit der ersten Transaktion ausgeführt wird. Daraus können wir ersehen, dass Zeilensperren direkt den idealen Zustand der Datenvereinigung erreichen können. Wenn eine Transaktion geändert wird, können andere Vorgänge nicht ausgeführt werden. Ich denke, dass dies für Sicherheitsprojekte wie Banken besser geeignet ist. Optimistisches Sperren: Das ist einfacher und verursacht keine Blockierung Der Weg besteht darin, die Versionsnummer hinzuzufügen Zum Aktualisieren verwenden Sie Geschriebene Wörter INSERT in Tabelle (contentStudyID,courseWareID,studyStatus,studyTime,endTime) Wählen Sie 27047358,3163,100,333,NOW() aus dual, wo nicht vorhanden (wählen Sie 1 aus Tabelle, wo contentStudyID =27047358 und Kursware-ID = 3163 ) Auf diese Weise können Sie beim Aktualisieren oder Schreiben direkt feststellen, ob die Daten in der Bibliothek vorhanden sind. Wenn sie nicht vorhanden sind, werden sie von anderen Threads verwendet. Nach der Umstellung auf diesen Schreibstil und der Verwendung von JMeter für Multithread-Tests waren die anfänglichen Aktualisierungen mehrerer Datensätze erfolgreich, jetzt ist jedoch nur noch ein Datensatz erfolgreich und der Rest schlägt fehl. Vom Einfügen mehrerer Datensätze am Anfang bis zum Einfügen nur eines Datensatzes später Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispielcode zur Konvertierung von http in https mit nginx
Oft möchten wir in Linux eine Datei finden, wisse...
Die Verwendung eines SSH-Terminals (z. B. Putty, ...
Beim Überprüfen der langsamen Abfrage stellte ich...
1. Komplettlösung 1. Problemanalyse und -lokalisi...
Installieren Sie zunächst den OpenSSH-Server im D...
1. Klicken Sie unten in IDEA auf Terminal und geb...
Überblick Bei kleinen und mittelgroßen Projekten ...
Dieser Artikel zeichnet das Installationstutorial...
Menüleiste Beispiel 1: Code kopieren Der Code lau...
Wenn MySQL zig Millionen Daten abfragt, können di...
docker-compose-monitor.yml Version: '2' N...
HTML-zentrierte Front-End-Entwicklung entspricht p...
Dies ist das Installationstutorial von mysql5.7.1...
Bei unserer täglichen Arbeit führen wir manchmal ...
1. Befehlseinführung Mit dem Befehl passwd werden...