Se você precisar de cerca de 10 milhões de chaves exclusivas (por exemplo), a melhor abordagem é escolher um espaço de chave que seja exponencialmente maior e começar a gerar aleatoriamente. Leia sobre o Paradoxo do aniversário - é a principal coisa que você deve se preocupar. Se você quiser 2^n chaves exclusivas e seguras, certifique-se de que haja pelo menos 2^(2 * n) valores possíveis. Aqui está um algoritmo O(n log n):
- Use um espaço de chave de pelo menos 2^50 (portanto, em outras palavras, permita 2^50 valores únicos possíveis), e você quase não terá colisões em todo o seu conjunto de dados - e qualquer força bruta em suas chaves terá têm chances iguais de conseguir uma chave se tentarem 2^25 delas.
- gerar quantos números aleatórios você precisar
- indexe o banco de dados em sua chave (este é o passo O(n lg n):a classificação)
- página através do banco de dados e iterar em todo o conjunto de dados para cortar duplicatas (pseudocódigo abaixo)
- Exclua as linhas duplicadas e pronto.
Pseudo-código:
$last = null;
while ($current = getnext()) {
if ($last == $current) {
push($toDelete, $current);
}
$last = $current;
}