Maison > base de données > tutoriel mysql > Comment générer des clés primaires entières uniques confidentielles, triables et compactes dans Django ?

Comment générer des clés primaires entières uniques confidentielles, triables et compactes dans Django ?

Susan Sarandon
Libérer: 2024-12-08 20:52:16
original
667 Les gens l'ont consulté

How to Generate Confidential, Sortable, and Compact Unique Integer Primary Keys in Django?

Clés primaires entières uniques dans Django : atteindre la confidentialité sans sacrifier la vitesse

Les clés primaires exposées peuvent poser des problèmes de sécurité. Pour résoudre ce problème, les développeurs cherchent souvent à remplacer la clé primaire auto-incrémentée par défaut par un entier unique qui n'est pas facilement devinable ou énumérable. Bien que le hachage de la clé d'origine soit une solution courante, cela entraîne une surcharge de performances et la nécessité d'une conversion à chaque accès à la clé.

Dans cet article, nous présentons une approche alternative inspirée de l'approche d'Instagram. Notre solution génère une clé entière unique qui répond aux critères suivants :

  • Type entier : Conserve le type de champ de clé primaire sous forme d'entier.
  • Composant basé sur le temps : Incorpore un composant basé sur le temps pour garantir la possibilité de tri par insertion temps.
  • Unique par table : Garantit l'unicité uniquement au sein de la table spécifique, pas globalement.
  • Longueur minimale : Vise une longueur de clé compacte pour éviter une URL excessive longueur.

Mise en œuvre

Génération des identifiants :

START_TIME = <unix timestamp constant>

def make_id():
    t = int(time.time()*1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23 ) | u
    return id
Copier après la connexion

Le Modèle :

class MyClass(models.Model):
   id = models.BigIntegerField(default = fields.make_id, primary_key=True)  
Copier après la connexion

Avantages

  • Confidentialité : Masque le nombre de lignes d'un tableau à la vue du public.
  • Performance : Évite les hachages inutiles opérations.
  • Compacité : Produit des valeurs clés généralement plus courtes que les hachages.

Cette approche répond efficacement aux préoccupations soulevées tout en répondant aux exigences spécifiques d'un système unique. clé primaire entière sans compromettre les performances ou l'efficacité du stockage.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal