我目前正在開發註冊系統原型。它非常簡單,基本上只是一個寫入MongoDB的.NET表單。針對數據庫條目的高效唯一密鑰生成
我卡與什麼是產生每個用戶的唯一ID /密鑰的有效方式。這些ID必須是人性化的,例如7個字符長的字母數字字符串,例如A1B2C3X。
我到目前爲止看到只使用一個簡單的函數來生成一個隨機字符串,然後檢查數據庫,看看它是否是唯一的(如果不是重複,直到你找到一個獨一無二的)的解決方案。隨着數據庫條目數量的增長,這當然會越來越計算成本。
我的想法是預先計算的唯一ID設置和存儲在另一個數據庫。然後,當我需要向用戶數據庫中添加一個新條目時,我可以從我的id數據庫中「持續」彈出一個id,並知道它不存在於用戶數據庫中,而無需搜索它。
我確定有人必須做過這樣的事情。有沒有更好的辦法?我不知道我爲什麼這麼掙扎。非常感謝您的意見。
由MongoDB驅動程序提供的ObjectId是否對您的用例太不友好? – 2012-03-11 12:39:21
我正在建議@EkinKoc的建議(如果你有40個字符,那麼這就是要走的路)。但是,如果您只需要7個字符,那麼您所概述的方法應該比使用單獨的數據庫密鑰存儲區彈出值更便宜*,更簡單,並且更少出錯。在隨機的7個字符的字母數字字符串上碰撞的機率幾乎爲零。這是一個罕見的邊緣情況,你不應該優化。 (無論如何用戶創建是很少見的,數據庫唯一性檢查對於相對較少的進程來說足夠快)。 – 2012-03-11 12:42:37
@ BenLee:碰撞的概率隨着比例的變化而變化:) – 2012-03-11 12:44:06