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

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

Barbara Streisand
풀어 주다: 2024-12-01 04:50:13
원래의
225명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿