sql >> Base de Datos >  >> RDS >> Mysql

¿Generando códigos únicos en PHP/MySQL?

Si necesita alrededor de 10 millones de claves únicas (por ejemplo), el mejor enfoque es elegir un espacio de clave que sea exponencialmente más grande y comenzar a generar aleatoriamente. Lee sobre la la paradoja del cumpleaños -- es lo principal por lo que deberías preocuparte. Si desea 2^n claves únicas y seguras, asegúrese de que haya al menos 2^(2 * n) valores posibles. Aquí hay un algoritmo aproximado de O(n log n):

  • Use un espacio de claves de al menos 2^50 (es decir, permita 2^50 valores únicos posibles) y apenas tendrá colisiones en todo su conjunto de datos, y cualquiera que utilice fuerza bruta en sus claves lo hará. tienen casi las mismas probabilidades de obtener una llave si prueban 2^25 de ellas.
  • genera tantos números aleatorios como necesites
  • indexe la base de datos en su clave (este es el paso O(n lg n):la ordenación)
  • pase a través de la base de datos e itere sobre todo el conjunto de datos para recortar duplicados (pseudocódigo a continuación)
  • Elimine las filas duplicadas y listo.

Pseudocódigo:

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