2011-03-17 53 views
2

我的客戶擁有超過400,000個客戶的數據庫。每個客戶都分配了一個GUID。他希望我選擇所有記錄,創建一個包含此GUID作爲參數的動態「簡短URL」。然後將這個簡短的URL保存到每個客戶記錄上的一個字段。動態生成SQL數據庫的短URL?

我的第一個問題是做的URL縮短網站的任何允許您以編程方式創建這樣的短網址?

+0

您的客戶是否滿意通過其中一個公共縮寫器(goo.gl,bit.ly等)重定向他的點擊率?我認爲他們不會讓您通過他們的服務生成縮短的網址,而不會將其用作重定向器。你有什麼理由不能實現你自己的縮短算法,而是在客戶的網站上運行一個短重定向器呢? – 2011-03-17 22:06:05

+0

他們可能會反對在大規模流程中擊中400,000次!如果你做得很好,並且做了一秒鐘,那會持續4.5天,但更快地做到「不友好」。 – 2011-03-17 22:21:13

回答

1

算法URL縮短站點使用非常簡單:

  1. Store中的網址,並給它的序列號映射。
  2. 將序列號(id)轉換爲固定長度的字符串。

在第二步中只使用六個小寫字母將爲您提供當前應用程序所需的更多(24^6)組合,並且沒有什麼能夠阻止在某個時間點使用較大的序列。如果允許使用數字和/或大寫字母,則可以使用較短的序列。

轉換算法是一種基本轉換(就像轉換爲十六進制時一樣),用任何符號代表零填充。這是轉換一些Python代碼:

LOWER = [chr(x + ord('a')) for x in range(25)] 
DIGITS = [chr(x + ord('0')) for x in range(10)] 
MAP = DIGITS + LOWER 

def i2text(i, l): 
     n = len(MAP) 
     result = '' 
     while i != 0: 
       c = i % n 
       result += MAP[c] 
       i //= n 
     padding = MAP[0]*l 
     return (padding+result)[-l:] 

print i2text(0,4) 
print i2text(1,4) 
print i2text(12,4) 
print i2text(36,4) 
print i2text(400000,4) 
print i2text(1600000,4) 

結果:然後

0000 
0001 
000c 
0011 
kib9 
4b21 

您的網址將形式http://mydomain.com/myapp/short/kib9的。