Mysql
 sql >> Base de données >  >> RDS >> Mysql

Générer des codes uniques en PHP/MySQL ?

Si vous avez besoin d'environ 10 millions de clés uniques (par exemple), la meilleure approche consiste à choisir un espace de clés exponentiellement plus grand et à commencer à générer de manière aléatoire. Lisez à propos du Paradoxe des anniversaires - c'est la principale chose dont vous devriez vous inquiéter. Si vous voulez 2^n clés uniques et sécurisées, assurez-vous qu'il y a au moins 2^(2 * n) valeurs possibles. Voici un algorithme approximatif O(n log n) :

  • Utilisez un espace de clé d'au moins 2^50 (donc, en d'autres termes, autorisez 2^50 valeurs uniques possibles), et vous n'aurez pratiquement aucune collision dans l'ensemble de vos données. ont à peu près les mêmes chances d'obtenir une clé s'ils en essaient 2^25.
  • générez autant de nombres aléatoires que nécessaire
  • indexez la base de données sur votre clé (c'est l'étape O(n lg n) :le tri)
  • parcourez la base de données et parcourez l'ensemble de données pour supprimer les doublons (pseudocode ci-dessous)
  • Supprimez les lignes en double, et vous avez terminé.

Pseudo-code :

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