>데이터 베이스 >MySQL 튜토리얼 >전역 고유성 없이 Django 모델에 대한 고유 정수 ID를 생성하는 방법은 무엇입니까?

전역 고유성 없이 Django 모델에 대한 고유 정수 ID를 생성하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-01 04:50:13294검색

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

Django의 특정 테이블에 대해 기본 키를 고유한 정수로 바꾸는 방법

Django 애플리케이션에서 기본 기본 키는 자동입니다. - URL을 통해 외부 사용자에게 표시될 수 있는 증가된 정수입니다. 이 정보를 보호하기 위한 일반적인 방법은 기본 키를 해시하는 것입니다. 그러나 이 방법에는 빈번한 해싱 및 해싱 해제가 필요할 수 있으므로 비효율적일 수 있습니다.

해결책

더 나은 접근 방식은 전역적으로 고유하지 않지만 고유한 정수를 생성하는 것입니다. 특정 테이블 내에서만 고유합니다. 이는 타임스탬프와 임의 구성요소의 조합을 사용하여 달성할 수 있습니다:

ID 생성을 위한 Python 코드

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

Django 모델

from django.db import models

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

장점

  • 테이블 내에서 고유하여 민감한 정보의 노출을 줄입니다.
  • 짧은 ID를 생성하고, URL 길이를 최소화합니다.
  • 해싱 오버헤드를 방지합니다. 읽기/쓰기 작업.

추가 참고 사항

  • START_TIME은 충돌을 방지하기 위해 타임스탬프 범위의 시작을 표시합니다.
  • reverse_id ID에서 타임스탬프로 쉽게 변환할 수 있으므로 생성 시간 추적이 용이합니다. 필요합니다.
  • 이 접근 방식은 Instagram에서 사용하는 ID 생성과 유사하며 확장 가능하고 효율적인 솔루션을 제공합니다.

위 내용은 전역 고유성 없이 Django 모델에 대한 고유 정수 ID를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.