Django の一意の整数主キー: 速度を犠牲にすることなく機密性を実現
主キーが公開されると、セキュリティ上の懸念が生じる可能性があります。これに対処するために、開発者は多くの場合、デフォルトの自動インクリメント主キーを、容易に推測または列挙できない一意の整数に置き換えようとします。元のキーをハッシュすることは一般的な解決策ですが、パフォーマンスのオーバーヘッドが発生し、キーにアクセスするたびに変換が必要になります。
この記事では、Instagram のアプローチにヒントを得た代替アプローチを紹介します。私たちのソリューションは、次の基準を満たす一意の整数キーを生成します:
実装
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 サイトの他の関連記事を参照してください。