Heim >Datenbank >MySQL-Tutorial >Wie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, kurze Ganzzahl-ID ersetzen?

Wie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, kurze Ganzzahl-ID ersetzen?

DDD
DDDOriginal
2024-12-03 16:51:10803Durchsuche

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

Djangos Primärschlüssel durch eine eindeutige Ganzzahl ersetzen

Problemübersicht

In Django ist der Standard-Primärschlüssel eine automatisch inkrementierte positive Ganzzahl, die durchgehend verwendet wird die Anwendung. Dadurch wird jedoch die Anzahl der Entitäten in der Datenbank öffentlich bekannt gegeben, sodass eine Alternative erforderlich ist. In diesem Artikel werden bestimmte Anforderungen an einen verschleierten Primärschlüssel behandelt:

  • Integer-Datentyp
  • Vermeidung von Hashing/Unhashing bei jedem Lese-/Schreib-/Vergleich
  • Einmaliges Hashing beim Einfügen des Datensatzes
  • Eindeutiger Hash-Wert innerhalb eines bestimmten Tabelle
  • Minimale Länge für kurze URLs

Vorgeschlagene Lösung

Die von diesem Artikel inspirierte Methode von Instagram erfüllt diese Anforderungen. Die generierte ID besteht aus:

  • 41 Bits für eine zeitbasierte Komponente
  • 23 zufällig ausgewählten Bits

Code-Implementierung

ID Generation:

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

Modell:

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

Das obige ist der detaillierte Inhalt vonWie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, kurze Ganzzahl-ID ersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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