短網址API設計

短網址服務做得最好的應該就是:bit.ly(包括支持數據統計等) 了。

短網址服務說白了就是URL映射,將較長的URL映射成短字符串。短址本質上是實現了一個映射函數 f(x)-> y 。對於每一個 y, 能夠找到唯一的一個 x 使得 f(x) = y。即不能產生一短URL地址對應多個長URL。可能的數據庫存儲格式爲:

  • ID,int,  自動增長;

  • LURL,varchar,  // 長URL;

  • SURL, varchar,  // 短URL。

現在我們考慮通過如何長URL得到唯一的短URL。

方案一:數據庫自增長ID轉換進制

使用自增長ID首先是不會產生重複,但是由於自增長ID由於是10進制,就會使URl變得很長,可以採用進制壓縮的方式將URL變短。爲了更好的提升URL的可讀性,需要在製作URL的時候考慮到:

  • 考慮到大小寫的字母讀音相同,所以暫定都使用大寫字母。這樣便於口頭傳播。

  • 考慮到發音相近,可以將字母中的L,R,I,M,N,G,J都去除。(或者再加上B,P)

  • 考慮到字形相同,可以將0和O都去除。便於識別。

於是可用字符爲26+10-7-2=2。然後需要確定最小需要的位數:

  • 27^3=19683

  • 27^4=531441

  • 27^5=14348907

  • 27^6=387420489

從上面的數據可以看到,使用了六位就可足以對我們的URL進行加密。相關的算法:略

方案二:URL hash計算

對URL進行處理的時候很容易想到MD5,MD5長度固定、衝突概率小等特性都是優勢,但是由於MD5長度爲32個字符,所以用來做短網址可能不太合適,那麼能不能以MD5爲基礎,將其字符進行縮短呢。以下爲這個方案的具體實現:

  1. 將長網址用md5算法生成32位簽名串,分爲4段,,每段8個字符;

  2. 對這4段循環處理,取每段的8個字符, 將他看成16進制字符串與0x3fffffff(30位1)的位與操作,超過30位的忽略處理;

  3. 將每段得到的這30位又分成6段,每5位的數字作爲字母表的索引取得特定字符,依次進行獲得6位字符串;

  4. 這樣一個md5字符串可以獲得4個6位串,取裏面的任意一個就可作爲這個長url的短url地址。

算法內容:略

由於上述算法對Md5進行了處理和截取,所以算法的重複的機率大約是n/(32^6) 也就是n/1,073,741,824(n是數據庫中記錄的條數),所以不建議使用。

參考地址:
  1. Google短網址的API    (閱讀:4025)
  2. 網址縮短服務    (閱讀:1834)
發佈了114 篇原創文章 · 獲贊 15 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章