ホームページ > データベース > mysql チュートリアル > Django の自動インクリメント主キーを一意の短い整数 ID に置き換えるにはどうすればよいですか?

Django の自動インクリメント主キーを一意の短い整数 ID に置き換えるにはどうすればよいですか?

DDD
リリース: 2024-12-03 16:51:10
オリジナル
758 人が閲覧しました

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

Django の主キーを一意の整数に置き換える

問題の概要

Django では、デフォルトの主キーは、全体で使用される自動インクリメントされる正の整数です。アプリケーション。ただし、これによりデータベース内のエンティティの数が公開されるため、代替手段の必要性が生じます。この記事では、難読化された主キーの特定の要件セットについて説明します。

  • 整数データ型
  • すべての読み取り/書き込み/比較におけるハッシュ/ハッシュ解除の回避
  • レコード挿入時のワンタイムハッシュ
  • 特定のフィールド内での一意のハッシュ値表
  • 短い URL の最小長

提案された解決策

この記事からインスピレーションを得た Instagram の方法は、次の要件を満たしています。生成される ID は以下で構成されます:

  • 時間ベースのコンポーネントの 41 ビット
  • ランダムに選択された 23 ビット

コード実装

ID世代:

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)
ログイン後にコピー

以上がDjango の自動インクリメント主キーを一意の短い整数 ID に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート