2010-09-14 28 views
0

我有一個Web應用程序,用戶可以在其中登錄並閱讀他們的消息。我使用數據庫中的ID主鍵通過網站訪問和處理用戶消息,例如(viewmessage/3),但我很快意識到我不想這樣做,因爲它向所有用戶提供了有關多少潛在的信息消息存儲在數據庫中。與用戶有同樣的想法,查看我用來使用他們的ID的用戶配置文件,但是這給出了網站上有多少用戶...... 所以我所做的是在每個表中添加一個名爲UrlKey的新列,這個關鍵字是varchar(16)它由16個唯一的隨機生成的數字組成,我用它來映射到服務器端的ID。唯一的數據庫urlkey而不是id

我現在的問題是16太多或常見的做法(16^10),我應該只使用int或ascii字符的組合,以及速度,安全性等方面的指導方針嗎? 非常感謝

回答

1

大多數數據庫使用GUIDUUID作爲唯一字符串,而不是自動遞增的ID。它們都可以存儲爲16字節的128整數,但是是32個字符。

我會使用GUID或UUID。那麼你總是會變得獨一無二。

+0

我想在我的網址中使用這個'GUID'來訪問特定區域,它的32個字符......可能會成爲一個問題?你只是讓我意識到我的系統是不可擴展的。我有一個循環,如果當前鍵已經存在,就會生成一個隨機鍵,所以如果我的記錄壓倒性地大,我可能會陷入這個循環中。 – user391986 2010-09-14 03:02:37

+0

@ user391986我看不到32個字符是一個問題。爲什麼在您完成之後爲您推出自己的唯一標識符。每個主要平臺都有一個生成GUID或UUID的方法。 – 2010-09-14 03:18:19

1

16^10是一個龐大的數字,即超過1萬億條消息。

如果您使用的是混合大小寫字母和數字,可以使用62個字符,並且有5個字符,您已經有62^5個組合,這個數字差不多是10億個組合。

+0

我最初使用混合,但後來我認爲如果代碼被注入或者如此,它會引起安全問題,我不知道是否足夠,所以決定玩它安全,只允許數字。 – user391986 2010-09-14 03:02:04

相關問題