Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eindeutige Codes in PHP/MySQL generieren?

Wenn Sie beispielsweise etwa 10 Millionen eindeutige Schlüssel benötigen, ist es am besten, einen exponentiell größeren Schlüsselraum auszuwählen und mit der zufälligen Generierung zu beginnen. Lesen Sie mehr über das Geburtstagsparadoxon – das ist das Wichtigste, worüber Sie sich Sorgen machen sollten. Wenn Sie 2^n eindeutige und sichere Schlüssel wünschen, stellen Sie sicher, dass es mindestens 2^(2 * n) mögliche Werte gibt. Hier ist ein grober O(n log n)-Algorithmus:

  • Verwenden Sie einen Schlüsselabstand von mindestens 2^50 (also mit anderen Worten, lassen Sie 2^50 mögliche eindeutige Werte zu), und Sie werden kaum Kollisionen in Ihrem gesamten Datensatz haben – und jeder, der Ihre Schlüssel brutal erzwingt, wird es tun ungefähr gleiche Chancen haben, einen Schlüssel zu bekommen, wenn sie 2^25 davon ausprobieren.
  • generiere so viele Zufallszahlen wie du brauchst
  • indizieren Sie die Datenbank auf Ihrem Schlüssel (das ist der Schritt O(n lg n):die Sortierung)
  • Durchsuchen Sie die DB und iterieren Sie über den gesamten Datensatz, um Duplikate zu entfernen (Pseudocode unten)
  • Löschen Sie die doppelten Zeilen, und Sie sind fertig.

Pseudocode:

$last = null;
while ($current = getnext()) {
    if ($last == $current) {
        push($toDelete, $current);
    }
    $last = $current;
}