Ich muss eine eindeutige ID für unsere Nutzer erstellen. Ich möchte keine auto_incrementing-ID verwenden, da ich nicht möchte, dass Nutzer schätzen können, wie viele Nutzer wir haben oder wie hoch die Wachstumsrate ist.
Eine UUID ist auch nicht wirklich eine Option, da Benutzer die ID auf einem Smartphone neu eingeben müssen.
Ich hoffe also, dass ich die "Brute-Forcing" -Datenbank so weit wie möglich reduzieren kann, um nicht verwendete IDs zu finden. Was wäre ein kluger Weg, dies zu tun?
Danke!
Erstellen Sie eine Liste von zufälligen Einheitszahlen (Sie könnten PHP% range()
und shuffle()
Funktionen verwenden), und es in der Datenbank oder sogar in einer TXT-Datei gespeichert haben. Stellen Sie sicher, dass die Liste lang genug ist, damit sie für einige Zeit anhält.
Wenn Sie eine neue ID benötigen, geben Sie einfach den ersten Wert aus der Liste ein.
OK, ich werde es noch einmal versuchen. Ihre Ziele sind:
Um eine gute Leistung in Ihrer Datenbank zu erzielen, sollten Sie eine standardmäßige inkrementierende Ganzzahl für Ihr PK beibehalten. Beachten Sie, dass InnoDB die Zeilen basierend auf dem PK sortiert (siehe " InnoDB Clustered Index "), wenn Sie also eine Art magischen Hash als PK verwenden, werden Sie in Ihrem Clustered-Index eine Menge an Neuordnung finden, was zu einer schlechten Schreibleistung führt.
Ich schlage vor, einen Verschlüsselungsalgorithmus (Verschlüsselung, nicht Hashing) zu verwenden, um die ID zu verschlüsseln und zu entschlüsseln, die Sie verschleiern möchten. Für die beste Verschleierung möchten Sie außerdem eine Mindestlänge für die resultierende Zeichenfolge verwenden. Die resultierende Zeichenfolge sollte weiterhin verwendbar sein, also müssen Sie etwas wie base64 verwenden, um es lesbar darzustellen.
Versuchen Sie dieses Verschlüsselungsbeispiel:
%Vor%Demo-Ergebnis:
%Vor%Sie können Ihren Datensatz erstellen und das Feld mit einer zufälligen UID über eine Funktion aktualisieren. Die Funktion überprüft die Eindeutigkeit:
%Vor%Für die vorhandenen Sachen können Sie dies ausführen:
%Vor%und in der insert-Anweisung können Sie Folgendes eingeben:
%Vor%Wenn ich Sie richtig verstehe, versuchen Sie, dass Benutzer ihre eigene eindeutige ID aus einer Tabelle auswählen können, in der noch kein Benutzer registriert ist. Wenn dies der Fall ist, würde ich meine User-Tabelle mit den Spalten userID und userName haben. Geben Sie dann die Benutzer-IDs zurück, bei denen userName immer noch null ist.
%Vor%Wenn Sie möchten, dass sie ihre eigenen auswählen, führen Sie eine Abfrage mit einer where-Klausel aus, die überprüft, ob eine bestimmte vom Benutzer eingegebene Nummer einen Namen hat. Sie können das Formular mit $ _POST ...
festlegen %Vor%und dann Ihre checkID.php
%Vor%und dann Ihre Abfrage
%Vor%Nun, ich sehe das als die Grundlagen für dich. Offensichtlich müssen Sie einige Validierungs- und Fehlerüberprüfungen durchführen.
Hoffe, dass Sie danach suchen. Lass es mich wissen, wenn nicht und werde mit etwas anderem zurückkommen.