Maison >base de données >tutoriel mysql >Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant unique, court et entier ?

Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant unique, court et entier ?

DDD
DDDoriginal
2024-12-03 16:51:10840parcourir

How Can I Replace Django's Auto-Incrementing Primary Key with a Unique, Short, Integer ID?

Remplacement de la clé primaire de Django par un entier unique

Aperçu du problème

Dans Django, la clé primaire par défaut est un entier positif auto-incrémenté utilisé partout la demande. Cependant, cela expose publiquement le nombre d’entités dans la base de données, ce qui nécessite une alternative. Cet article répond à un ensemble spécifique d'exigences pour une clé primaire obscurcie :

  • Type de données entier
  • Évitement du hachage/déhachage pour chaque lecture/écriture/comparaison
  • Hachage unique lors de l'insertion de l'enregistrement
  • Valeur hachée unique dans un domaine spécifique table
  • Longueur minimale des URL courtes

Solution proposée

La méthode Instagram, inspirée de cet article, répond à ces exigences. L'ID généré se compose de :

  • 41 bits pour un composant temporel
  • 23 bits choisis au hasard

Implémentation du code

Identifiant Génération :

START_TIME = <unix timestamp>

def make_id():
    t = int(time.time()*1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u
    return id

def reverse_id(id):
    t = id >> 23
    return t + START_TIME

Modèle :

class MyClass(models.Model):
    id = models.BigIntegerField(default=fields.make_id, primary_key=True)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn