> 데이터 베이스 > MySQL 튜토리얼 > Django에서 기밀, 정렬 가능 및 소형 고유 정수 기본 키를 생성하는 방법은 무엇입니까?

Django에서 기밀, 정렬 가능 및 소형 고유 정수 기본 키를 생성하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-08 20:52:16
원래의
668명이 탐색했습니다.

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

Django의 고유한 정수 기본 키: 속도 저하 없이 기밀성 확보

기본 키가 노출되면 보안 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해 개발자는 기본 자동 증가 기본 키를 쉽게 추측하거나 열거할 수 없는 고유한 정수로 대체하려고 하는 경우가 많습니다. 원래 키를 해싱하는 것이 일반적인 솔루션이지만 성능 오버헤드가 발생하고 키에 액세스할 때마다 변환이 필요합니다.

이 기사에서는 Instagram의 접근 방식에서 영감을 받은 대체 접근 방식을 제시합니다. 당사의 솔루션은 다음 기준을 충족하는 고유한 정수 키를 생성합니다.

  • 정수 유형: 기본 키 필드 유형을 정수로 유지합니다.
  • 시간 기반 구성 요소: 삽입을 통한 정렬 가능성을 보장하기 위해 시간 기반 구성 요소를 통합합니다. time.
  • 테이블별 고유: 전체가 아닌 특정 테이블 내에서만 고유성을 보장합니다.
  • 최소 길이: 컴팩트한 키 길이를 목표로 합니다. 과도한 URL을 피하기 위해 길이.

구현

ID 생성:

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
로그인 후 복사

모델:

class MyClass(models.Model):
   id = models.BigIntegerField(default = fields.make_id, primary_key=True)  
로그인 후 복사

이점

  • 기밀성: 테이블의 행 수를 공개적으로 숨깁니다. view.
  • 성능: 불필요한 해싱 작업을 방지합니다.
  • 컴팩트성: 일반적으로 해시보다 짧은 키 값을 생성합니다.

이 접근 방식은 고유한 정수 기본 키의 특정 요구 사항을 충족하면서 제기되는 문제를 효과적으로 해결합니다. 성능이나 저장 효율성이 저하됩니다.

위 내용은 Django에서 기밀, 정렬 가능 및 소형 고유 정수 기본 키를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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