sql >> Database >  >> RDS >> Mysql

Unieke codes genereren in PHP/MySQL?

Als je bijvoorbeeld ongeveer 10 miljoen unieke sleutels nodig hebt, kun je het beste een sleutelruimte kiezen die exponentieel groter is en willekeurig beginnen te genereren. Lees over de Verjaardagsparadox -- het is het belangrijkste waar u zich zorgen over moet maken. Als u 2^n unieke en veilige sleutels wilt, zorg er dan voor dat er ten minste 2^(2 * n) mogelijke waarden zijn. Hier is een ruw O(n log n) algoritme:

  • Gebruik een sleutelruimte van minimaal 2^50 (met andere woorden, laat 2^50 mogelijke unieke waarden toe), en je zult nauwelijks botsingen hebben in je hele dataset -- en iedereen die brutaal je sleutels forceert, zal dat doen hebben ongeveer gelijke kansen om een ​​sleutel te krijgen als ze er 2^25 proberen.
  • genereer zoveel willekeurige getallen als je nodig hebt
  • indexeer de database op uw sleutel (dit is de O(n lg n) stap:de sortering)
  • blader door de database en herhaal de hele dataset om duplicaten bij te knippen (pseudocode hieronder)
  • Verwijder de dubbele rijen en je bent klaar.

Pseudocode:

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


  1. letterlijke komt niet overeen met de tekenreeksfout bij het bijwerken van de sql-tabel

  2. MySQL te lang varchar truncatie/foutinstelling

  3. Back-up en herstel van PostgreSQL-database en setup localhost-omgeving met laravel in Windows 7

  4. Meerdere door MYSQLi voorbereide verklaringen