關於短網址系統的一點看法

聲明:該文屬於自己的一點點看法而已,僅供娛樂參考,勿噴。轉載請標明:http://blog.csdn.net/lywybo

 

微博的短網址系統大家應該都不陌生吧。具體短網址是幹嘛的,爲什麼要有短網址,我就不羅嗦了,不知道的直接google就成。

sina短網址域名是http://t.cn 騰訊短網址域名是http://url.cn

 

短網址的組成:

不說廢話,只看sina和qq的,其他的忽略,畢竟實現起來有N種方法。sina和qq的都是域名+key的形式

key值目前由六位組成。每位62個字符(0-9,a-z,A-Z)。

 

 

很多人分析短網址系統就會說,先MD5或者其他的hash,然後各種與、各種或得出幾組值,選其中一組即可。

 

我覺得有這種思路的人一般都是看到4gBOjY 、39qdlG 這種類型,就會聯想到md5的結果的一部分,所以就用盡各種方法給扯到了md5的結果上,不是說這樣做不妥,只是覺得可以有更好的方案。

 

 

6位62個字符,那麼總量是固定的600多億,也就是說短網址,不管你用啥子hash生成,只能生成600多億個,只能存600多億條網址。既然總數都是固定的,那麼幹嘛每次存一個新網址的時候要先生成MD5然後在把MD5包裝過來包裝過去得到一個6位的key呢,本身MD5就會碰撞,你縮到6位碰撞不就更厲害了麼,重複了咋辦呢?

直接來個62進制每次加一不就行了麼,反正容量是固定的,hash過來hash過去有意思麼?

 

短網址的特點:

1.短。key值僅6位、域名也很短

2.對於已經縮略的網址,直接返回已有的key

3.沒有收錄過的網址,會生成一個唯一的key表示

 

 

第一組測試

16:35  http://weibo.short.url.test.com/lywybo              http://t.cn/aN6Go5

16:38  http://weibo.short.url.test.com/blog/lywybo      http://t.cn/aN6Gry       與上個相比,表明是有序的

16:39  http://www.sina.com.cn/lywybo/csnd/blog        http://t.cn/aN65Y4       與上兩個相比,表明有序不是因爲同個域

16:39  http://www.baidu.com                                       http://t.cn/h5mwx        與上三個相比,表明已有的,直接返回key值

 

 

第二組測試

 

http://t.cn/aN65Y4 (我發的)   ---------->    http://www.sina.com.cn/lywybo/csnd/blog

http://t.cn/aN65Y3 (應該是別人新建的微羣,才1個人。。。。截圖時間和上面那個接近)

截圖時間:16:41

說明不只你有序,別人和你一樣,有序。

 

結論:綜上所述,新浪的短網址是有序的。

 

 

廢話說了那麼多,終於進入正題了,說下我認爲短網址的實現方式

我認爲。。。。短網址系統,直接用(0-9,a-z,A-Z)組成的62進制數,不停累加就行了,新浪目前應該就是這麼的實現方式。

存儲格式:key--url--MD5

aaaaaa--http://www.baidu.com/1---MD5

aaaaab--http://www.baidu.com/2---MD5

aaaaac--http://www.baidu.com/2---MD5

aaaaad--http://www.baidu.com/2---MD5

 

key可以存一組索引,用於通過key訪問轉換url

MD5(hash)可以做一組索引,用來檢測url是否已經被縮略過.

上文提到MD5會碰撞,重複的時候直接將碰撞的url讀出直接比對即可。。。(這個時候不要忘記做記錄log啊,因爲你發現了新大陸了。。。)

 

數據的存儲方式:

不推薦數據庫存儲,量大了之後不分庫、分表,效率太低。分庫、分表成本都太高了。還是直接像搜索引擎一樣文件存儲比較自由

 

比搜索引擎索引更簡單的一點是:這個索引建立了之後不用更新的,一直往下存就是了,假設一條記錄1K,都可以計算出需要使用多大的容量(還是很小的幾塊硬盤的事),索引的存儲,類似搜索引擎切詞後索引的分割做法,對索引在做索引。

其實可以將這種存儲定性爲雙索引的小文件存儲系統(key值順序索引、MD5索引)

對於熱門的url,直接LRU緩存起

 

擴展性:

當626滿了怎麼辦呢?

1.key擴充到7位。。。

2.其他程序什麼都不用變繼續62進制,只是key值長度變長了。。。。

 

疑問:

可能有同學會問了,爲嘛就一定會key變到7位啊?

那我就想反問一個,誰規定微博的key值一定是6位的?其實http://t.cn 本身就比 http://url.cn 少一位呢。也就是在新浪微博同樣髮帶url的微博時候,你比qq微博可以多發一個字。

新浪微博

騰訊微博

 

迴歸到爲嘛選6,因爲6位的話就是600多億,它足夠大,短時間內用不完。。。貌似google索引網頁的量也就一兩千億吧(查不到準確數據)。

所以用6夠了。

爲嘛不用5,因爲用5的話就是10億,小了點不是很靠譜。。。

爲嘛不用7,用7就少一個字(新浪就是比騰訊多了一個字,所以現在比騰訊火。。。哈哈,開玩笑),等6滿了在用7也不晚。

 

最後的期待:

1.期待http://t.cn/iloveu 的產生

2.期待6位key值耗盡的那天。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章