2012-07-30 36 views
1

我知道這已經討論過很多次了,我希望能爲我的具體案例得到一個建議。使用長字符串作爲唯一表ID(或不)?

我在一個社交網站上工作,理論上應該可以將數十億張照片記錄在mysql數據庫中。

我想知道是否是一個好主意,用像'oij43oj54oi52j43i'這樣的字符串ID替換記錄的唯一BIGINT ID。

的優勢將是:

  1. 我可以插入照片記錄到散佈在不同與BIGINT ID,你需要等待,在插入時從MySQL獲得下一行號的多臺服務器的多個數據庫。

  2. 如果用戶輸入像/avatars/120.jpg這樣的整數,它將不太可能讓用戶隨機訪問圖像,如果它是/avatars/oij43oj54oi52j43i.jpg。我知道這第二部分也可以通過URL重寫來完成,但會使用一些CPU /內存。

的其它表,如 「photo_comments」 也可以指的是照片,e.g photo_comment_photo_id = 'oij43oj54oi52j43i' 時使用相同的字符串ID;

記住這些,使用字符串ID是不是一個好主意?特別是對於我提到的第一個優點,是否是一個有效的點/優勢/實踐?

謝謝。

編輯:確保字符串是唯一的可以通過將用戶ID附加到字符串來完成,也可以使用使用時間戳微秒的php uniqid()

+0

你打算如何確保oij43oj54oi52j43i是一個獨特的價值?自動增量值的設計是有原因的。不要試圖模仿已經完美運行的東西,並堅持使用自動增量。 – Jocelyn 2012-07-30 16:26:34

+0

你考慮過guid嗎?請參閱http://stackoverflow.com/questions/547118/storing-mysql-guid-uuids和http://stackoverflow.com/questions/8180019/what-is-the-replacement-for-uniqueidentifier-in-mysql – hatchet 2012-07-30 16:27:16

+0

@ Jocelyn的獨特性可以通過將照片用戶ID附加到php uniqid()來實現,我編輯的問題包括這個。對於用戶25,照片ID可能看起來像25oij43oj54oi52j43i – adrianTNT 2012-07-30 16:36:55

回答

2

如果你正在構建這樣的應用程序,你應該從Instagram上獲取一個頁面,並使用UUID而不是順序ID。這些有很多優點,但最大的優點是它們可擴展和可分割。

在大多數語言中都有一個簡單的UUID庫,甚至MySQL有一個UUID生成器可用作最後的手段。

Instagram的版本不是純粹的UUID,而是足夠類似的64位版本。

基本上你應該得到read this article on Sharding and IDs at Instagram的靈感。

相關問題