Heim > Datenbank > MySQL-Tutorial > Wie generiert man eindeutige Ganzzahl-IDs für Django-Modelle ohne globale Eindeutigkeit?

Wie generiert man eindeutige Ganzzahl-IDs für Django-Modelle ohne globale Eindeutigkeit?

Barbara Streisand
Freigeben: 2024-12-01 04:50:13
Original
225 Leute haben es durchsucht

How to Generate Unique Integer IDs for Django Models Without Global Uniqueness?

So ersetzen Sie den Primärschlüssel durch eine eindeutige Ganzzahl für eine bestimmte Tabelle in Django

In Django-Anwendungen ist der Standard-Primärschlüssel ein Auto -Inkrementierte Ganzzahl, die für externe Benutzer über URLs sichtbar sein kann. Um diese Informationen zu schützen, ist es üblich, den Primärschlüssel zu hashen. Diese Methode erfordert jedoch möglicherweise häufiges Hashing und Unhashing, was ineffizient sein kann.

Lösung

Ein besserer Ansatz besteht darin, eine eindeutige Ganzzahl zu generieren, die jedoch nicht global eindeutig ist nur innerhalb einer bestimmten Tabelle eindeutig. Dies kann durch eine Kombination aus einem Zeitstempel und einer Zufallskomponente erreicht werden:

Python-Code zum Generieren von IDs

import time
import random

START_TIME = time.time() * 1000  # Initial timestamp (arbitrary)

def make_id():
    """
    Generates a unique ID based on a timestamp and random bits.
    """
    t = int(time.time() * 1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u
    return id

def reverse_id(id):
    """
    Converts ID back to a timestamp.
    """
    t = id >> 23
    return t + START_TIME
Nach dem Login kopieren

Django Modell

from django.db import models

class MyClass(models.Model):
    id = models.BigIntegerField(default=make_id, primary_key=True)
Nach dem Login kopieren

Vorteile

  • Einzigartig innerhalb einer Tabelle, wodurch die Offenlegung sensibler Informationen reduziert wird.
  • Erzeugt kurze IDs, Minimierung der URL-Länge.
  • Vermeidet den Hashing-Overhead beim Lesen/Schreiben Operationen.

Zusätzliche Hinweise

  • START_TIME markiert den Beginn des Zeitstempelbereichs, um Konflikte zu vermeiden.
  • reverse_id ermöglicht eine einfache Konvertierung von ID zurück in Zeitstempel, was bei Bedarf die Nachverfolgung von Erstellungszeiten erleichtert.
  • Dieser Ansatz ist ähnlich zur von Instagram verwendeten ID-Generierung und bietet so eine skalierbare und effiziente Lösung.

Das obige ist der detaillierte Inhalt vonWie generiert man eindeutige Ganzzahl-IDs für Django-Modelle ohne globale Eindeutigkeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage