我的客戶擁有超過400,000個客戶的數據庫。每個客戶都分配了一個GUID。他希望我選擇所有記錄,創建一個包含此GUID作爲參數的動態「簡短URL」。然後將這個簡短的URL保存到每個客戶記錄上的一個字段。動態生成SQL數據庫的短URL?
我的第一個問題是做的URL縮短網站的任何允許您以編程方式創建這樣的短網址?
我的客戶擁有超過400,000個客戶的數據庫。每個客戶都分配了一個GUID。他希望我選擇所有記錄,創建一個包含此GUID作爲參數的動態「簡短URL」。然後將這個簡短的URL保存到每個客戶記錄上的一個字段。動態生成SQL數據庫的短URL?
我的第一個問題是做的URL縮短網站的任何允許您以編程方式創建這樣的短網址?
TinyURL的允許你這樣做(不廣泛記錄),例如:
http://tinyurl.com/api-create.php?url=http://www.stackoverflow.com/
所以你可以有
http://tinyurl.com/api-create.php?url=http://mysite.com/user/xxxx-xxxx-xxxx-xxxx
GUID不最終被說清楚,但網址應該是唯一的
請注意,你必須通過一個HttpWebRequest的通過這一點,並得到響應。
您可以使用Google的URL縮寫,他們有一個API。
下面是該文檔:http://code.google.com/apis/urlshortener/v1/getting_started.html
此網址不能足夠短:?
http://www.clientsdomain.com/?customer=267E7DDD-8D01-4F38-A3D8-DCBAA2179609
注:我個人認爲您的客戶端請求一些奇怪的事情。通過要求您在每個客戶記錄上創建一個URL字段(通過確定性算法將基於客戶的GUID),實際上他實際上要求您對數據庫進行非規範化處理。
算法URL縮短站點使用非常簡單:
在第二步中只使用六個小寫字母將爲您提供當前應用程序所需的更多(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的。
您的客戶是否滿意通過其中一個公共縮寫器(goo.gl,bit.ly等)重定向他的點擊率?我認爲他們不會讓您通過他們的服務生成縮短的網址,而不會將其用作重定向器。你有什麼理由不能實現你自己的縮短算法,而是在客戶的網站上運行一個短重定向器呢? – 2011-03-17 22:06:05
他們可能會反對在大規模流程中擊中400,000次!如果你做得很好,並且做了一秒鐘,那會持續4.5天,但更快地做到「不友好」。 – 2011-03-17 22:21:13