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;
}