Wir können Registrierungen nicht serialisieren, da sich Millionen von Benutzern gleichzeitig registrieren. Parallele Registrierungen müssen stattfinden.
Angenommen, die Datenbank enthält keinen Benutzernamen 'user1'. Wenn zwei Benutzer versuchen, sich gleichzeitig bei 'user1' zu registrieren, wird dies akzeptiert. Aber es wird später Probleme verursachen. Das sollte nicht passieren.
Ich suche nach einer logischen Lösung. Nichts Bestimmtes. Nur eine Idee, um dies zu lösen.
database
multithreading
Addzy K.
quelle
quelle
Antworten:
Warum sollte es das akzeptieren? Es ist einfach, eine eindeutige Einschränkung anzuwenden, den Benutzernamen als Primärschlüssel zu verwenden oder einfach den eingecheckten Anwendungscode innerhalb einer Transaktion auszuführen.
Sie sollten unbedingt in der Lage sein, eine Datenbanktransaktion zu verwenden, um die Datenbank zu verwenden, um dies zu verhindern. Andernfalls könnte keine Anwendung Invarianten in Datenbankdaten verwalten.
In Bezug auf die Skalierung haben Datenbanken bereits die Technologien erfunden, die Sie benötigen, z. B. verschiedene Sperrmodi, je nachdem, welche Art von Konsistenz Sie benötigen, verteilte Datenbanken für mehrere Datenbankserver usw.
quelle
Hierfür gibt es eine Standardlösung. Erstellen Sie mehrere Mitarbeiter, um die Registrierungen durchzuführen. Auf jede Anforderung wird ein Hash auf den Benutzernamen angewendet, und der Hash bestimmt, welcher Worker die Anforderung verarbeitet. Auf diese Weise können nicht zwei Anforderungen für denselben Benutzernamen gleichzeitig verarbeitet werden.
Berücksichtigen Sie für diese Art von Anforderungsvolumen einen verteilten Schlüsselwertspeicher wie das Risiko anstelle einer vollständigen Datenbank als Datenspeicher.
quelle
Ist es ein Problem ?
Es ist nicht akzeptabel, zwei Benutzer ihre Registrierung mit einem nicht eindeutigen Benutzernamen abschließen zu lassen, wenn der Benutzername (und nicht die Benutzer-E-Mail-Adresse) für die Anmeldung verwendet wird.
Wenn der Benutzername nicht für die Authentifizierung verwendet wird, können Sie mithilfe eines Hintergrundprozesses die Doubles identifizieren und kennzeichnen (z. B. basierend auf dem Zeitstempel) und den Benutzer zwingen, seinen Benutzernamen bei der nächsten Anmeldung zu ändern
Ja, das ist ein Problem
Wie Sie fragen, nehme ich an, dass der Benutzername eine eindeutige ID sein soll. Folgende Ansätze könnten verwendet werden:
quelle
Überdenken Sie, was Sie als eindeutige Kennung für einen Benutzer betrachten. Jeder Benutzer hat bereits eine eindeutige E-Mail-Adresse, sodass das Problem bereits für Sie gelöst wurde. Dies bedeutet natürlich, dass mehrere Benutzer denselben Namen wie "Mike Nakis" registrieren können. Gibt es ein Problem damit? Bist du sicher? Dies ist beispielsweise für Facebook kein Problem. Es gibt mehrere Facebook-Nutzer namens "Mike Nakis". Schauen Sie sich die Facebook-Anmeldeseite an: Sie werden nach "E-Mail oder Telefon" und "Passwort" gefragt.
quelle
Bei Millionen von Benutzern, die sich gleichzeitig registrieren, verwenden Sie nur 26 x 26 Registrierungsserver, einen für Benutzer, die mit aa beginnen, einen für Benutzer, die mit ab beginnen, und so weiter. Infolgedessen registrieren sich nur Tausende von Benutzern gleichzeitig auf jedem Server. Wenn Sie damit immer noch nicht umgehen können, verwenden Sie 26 x 26 x 26 Server.
quelle