2017-05-19 3 views
0

Ich mache eine Abstimmungsanwendung, wo Stimmen gegen jeden Kandidaten in der Datenbank registriert werden, seit seiner Online-Abstimmungsverfahren, gibt es Chancen, dass viele Menschen werden die gleiche Person zu einer Zeit abstimmen, so Ich stehe vor dem Problem des gleichzeitigen Lesens und Aktualisierens, des gleichen Wertes, wie ich mit dieser Bedingung umgehen sollte. So dass jede Stimme registriert wird und die Verzögerung sollte minimal sein. Ich verwende JDBC und mySQL als Datenbank.gleichzeitiges Lesen und Schreiben zu gleichen Wert in der Datenbank

+0

Wie sieht Ihr Code aus? 'update votes gesetzt kandidat1 = (kandidat1 + 1)'? –

+0

Verwenden Sie die Diff-Tabelle, um die Kandidaten und Stimmen zu speichern. Sie können einen Eintrag hinzufügen, wenn eine Person abstimmt. Später können Sie das Ergebnis durch Joins erhalten. – Kajal

Antwort

0

@ user3418790 Stellen Sie sicher, dass Sie die InnoDB-DB-Engine für diese Tabelle verwenden.

Verwenden Sie das Sperren in einer Transaktion und speichern Sie einen Zeitstempel oder eine Versionskennung in der Tabelle, damit Sie wissen, wann sich eine Zeile geändert hat.

  1. Beginne die Transaktion.
  2. Holen Sie sich den Zeitstempel oder die Version und vergleichen Sie ihn mit dem Wert, den Sie erwarten. Wenn geändert, dann scheitern und lassen Sie den Benutzer damit umgehen.
  3. Aktualisieren Sie die Daten.
  4. Übernehmen Sie die Transaktion.

Das ist es.

Verwandte Themen