ホームページ >データベース >mysql チュートリアル >Django で機密でソート可能でコンパクトな一意の整数主キーを生成するにはどうすればよいですか?

Django で機密でソート可能でコンパクトな一意の整数主キーを生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 20:52:16672ブラウズ

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

Django の一意の整数主キー: 速度を犠牲にすることなく機密性を実現

主キーが公開されると、セキュリティ上の懸念が生じる可能性があります。これに対処するために、開発者は多くの場合、デフォルトの自動インクリメント主キーを、容易に推測または列挙できない一意の整数に置き換えようとします。元のキーをハッシュすることは一般的な解決策ですが、パフォーマンスのオーバーヘッドが発生し、キーにアクセスするたびに変換が必要になります。

この記事では、Instagram のアプローチにヒントを得た代替アプローチを紹介します。私たちのソリューションは、次の基準を満たす一意の整数キーを生成します:

  • 整数型: 主キー フィールドの型を整数として維持します。
  • 時間ベースのコンポーネント: 挿入による並べ替え可能性を確保するために時間ベースのコンポーネントを組み込みます。
  • テーブルごとに一意: グローバルではなく、特定のテーブル内でのみ一意性を保証します。
  • 最小の長さ: コンパクトなキー長を目指します過剰な 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)  

利点

  • 機密性: テーブル内の行数をパブリックビューから非表示にします。
  • パフォーマンス:不必要なハッシュ操作を回避します。
  • コンパクト性: 一般にハッシュより短いキー値を生成します。

このアプローチは、特定の要件を満たす際に生じる懸念に効果的に対処します。パフォーマンスやストレージ効率を損なうことなく、一意の整数主キーを作成できます。

以上がDjango で機密でソート可能でコンパクトな一意の整数主キーを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。