首页 > 数据库 > mysql教程 > 如何用唯一的、短的、整数 ID 替换 Django 的自动递增主键?

如何用唯一的、短的、整数 ID 替换 Django 的自动递增主键?

DDD
发布: 2024-12-03 16:51:10
原创
808 人浏览过

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

用唯一整数替换 Django 的主键

问题概述

在 Django 中,默认主键是一个自增正整数,贯穿始终该应用程序。然而,这会公开暴露数据库中实体的数量,从而促使需要替代方案。本文解决了混淆主键的一组特定要求:

  • 整数数据类型
  • 避免每次读/写/比较时进行散列/取消散列
  • 记录插入时进行一次性哈希
  • 特定范围内的唯一哈希值表
  • 短网址的最小长度

建议的解决方案

受本文启发的Instagram 方法满足这些要求。生成的 ID 包含:

  • 基于时间的组件的 41 位
  • 随机选择的 23 位

代码实现

身份证世代:

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
登录后复制

型号:

class MyClass(models.Model):
    id = models.BigIntegerField(default=fields.make_id, primary_key=True)
登录后复制

以上是如何用唯一的、短的、整数 ID 替换 Django 的自动递增主键?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板