首頁 >資料庫 >mysql教程 >如何在 Django 中產生機密、可排序且緊湊的唯一整數主鍵?

如何在 Django 中產生機密、可排序且緊湊的唯一整數主鍵?

Susan Sarandon
Susan Sarandon原創
2024-12-08 20:52:16669瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn