1

用戶可以通過Facebook的身份驗證,所以我存儲的Facebook的UID在我的數據庫,當在我用戶登錄需要查詢我的數據庫是這樣的:什麼是最好的數據庫類型來存儲Facebook的UID?我的應用程序的

SELECT * FROM users WHERE uid = _SOME_UID_; 

現在uid列是VARCHAR,但我認爲,我需要將它轉換爲一些數字類型的BIGINT。

爲什麼我覺得我需要做的是:

  1. 處理器時間:與數字(過濾/索引)一般操作總是比相同的操作變得更快用繩子

  2. 存儲:數字小於相應的字符串

  3. ammm ... oauth-argume NT Facebook的身份驗證是驗證我將使用的唯一類型(actualy,這是一個畫布應用程序) - 所以我不需要去關心那些非NUMERICS

和問題的UID是:

  1. 我對嗎?
  2. Facebook有一天會開始使用非數字式用戶名嗎?
+0

我不認爲他們會開始使用非數字ID,這會在他們的系統中造成很多麻煩(因爲我猜他們使用某種格式,檢查userIDs aswel)。 Bigint會做得很好。 –

+0

varchar可以用作映射來查找存儲數據的機器,並且可以使用其他不熟悉的技巧(您可以使用數字來完成相同的操作,但要獲取正確的數字會更加複雜)。我猜測存儲系統的facebook使用比傳統數據庫更復雜,並可能會使用varchars的優勢。最後,任何軟件工程師都會認爲使用數字作爲初始思想的關鍵。我相信Facebook有這樣的想法,並選擇使用varchar的原因 –

回答

1

我會堅持使用VARCHAR。

雖然它當然可以存儲爲一個,但我認爲Facebook UID並不是真正的數字。這是一個字符集合,恰好都是數字 - 但它是一個標識符,而不是被操縱的數字。

我想知道真的是會有什麼樣的性能差異。找出答案,做出決定會更容易。

+0

那麼,大致BIGINT是8字節。 VARCHAR中的UID是10個字節。所以,存儲不是最好的說法。也許處理器處理索引時間是關鍵...... –

1

這取決於幾個因素。首先也是最重要的是,我們談論數以千計的UID或數以百萬計的數據收集可能會有多大?如果你的項目試圖找到最小的容器(一個大的整數),如果你不擔心規模,那麼你更擔心能夠隨着變化進行擴展。

所以現在你需要選擇一個合理大小的VarChar,它將採用任何格式的UID並且很高興 - 這包括前導零和bigInt,它更容易消毒,但對前導零和字母不友好。

如果你知道 UID始終是一個非前導零或零填充的數字,那麼你可以通過鑄造類型進行消毒來獲得稍好的安全性。這和大小是bigInt的所有好處。

VarChar的規模已經下降 - 在開始之前,您需要知道最大的UID長度,但可以使用您正在清理字符串的小例外來處理前導零,字母和其他意外內容。

從編程的角度來看,它幾乎沒有什麼優勢,因爲UID只是一個獨特的標籤。有了它的索引,我不應該想象MySQL中有任何速度差異,至少不會使用它可能使用的通用引擎。

所以最好只是您最需要的數據產品。

相關問題