亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1446 | 回復: 0
打印 上一主題 下一主題

微博URL短地址壓縮算法分析 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-21 08:44 |只看該作者 |倒序瀏覽

短網(wǎng)址應用已經(jīng)在全國各大微博上開始流行了起來。例如QQ微博的url.cn,新郎的t.cn等。

我們在QQ微博上發(fā)布網(wǎng)址的時候,微博會自動判別網(wǎng)址,并將其轉(zhuǎn)換,例如:http://url.cn/2hytQx

為什么要這樣做的,原因我想有這樣幾點:

1.微博限制字數(shù)為140字一條,那么如果我們需要發(fā)一些連接上去,但是這個連接非常的長,以至于將近要占用我們內(nèi)容的一半篇幅,這肯定是不能被允許的,所以短網(wǎng)址應運而生了。
2.短網(wǎng)址可以在我們項目里可以很好的對開放級URL進行管理。有一部分網(wǎng)址可以會涵蓋色情,暴力,廣告等信息,這樣我們可以通過用戶的舉報,完全管理這個連接將不出現(xiàn)在我們的應用中,應為同樣的URL通過加密算法之后,得到的地址是一樣的。
3.我們可以對一系列的網(wǎng)址進行流量,點擊等統(tǒng)計,挖掘出大多數(shù)用戶的關注點,這樣有利于我們對項目的后續(xù)工作更好的作出決策。
其實以上三點純屬個人觀點,因為在我接下來的部分項目中會應用到,所以就了解了一下,下面先來看看短網(wǎng)址映射算法的理論(網(wǎng)上找到的資料):

1.將長網(wǎng)址md5生成32位簽名串,分為4段,每段8個字節(jié);
2.對這四段循環(huán)處理,取8個字節(jié),將他看成16進制串與0x3fffffff(30位1)與操作,即超過30位的忽略處理;
3.這30位分成6段,每5位的數(shù)字作為字母表的索引取得特定字符,依次進行獲得6位字符串;
4.總的md5串可以獲得4個6位串;取里面的任意一個就可作為這個長url的短url地址;
很簡單的理論,我們并不一定說得到的URL是唯一的,但是我們能夠取出4組URL,這樣幾乎不會出現(xiàn)太大的重復。

下面來看看程序部分: 
public static string[] ShortUrl(string url)
{
 //可以自定義生成MD5加密字符傳前的混合KEY
 string key = "Leejor";
 //要使用生成URL的字符
 string[] chars = new string[]{
   "a","b","c","d","e","f","g","h",
      "i","j","k","l","m","n","o","p",
  "q","r","s","t","u","v","w","x",
     "y","z","0","1","2","3","4","5",
   "6","7","8","9","A","B","C","D",
    "E","F","G","H","I","J","K","L",
    "M","N","O","P","Q","R","S","T",
  "U","V","W","X","Y","Z"
 };
 
  //對傳入網(wǎng)址進行MD5加密
   string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");

 string[] resUrl = new string[4];

 for (int i = 0; i < 4; i++)
 {
  //把加密字符按照8位一組16進制與0x3FFFFFFF進行位與運算
     int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);
  string outChars = string.Empty;
     for (int j = 0; j < 6; j++)
     {
         //把得到的值與0x0000003D進行位與運算,取得字符數(shù)組chars索引
         int index = 0x0000003D & hexint;
         //把取得的字符相加
       outChars += chars[index];
     //每次循環(huán)按位右移5位
         hexint = hexint >> 5;
     }
  //把字符串存入對應索引的輸出數(shù)組
   resUrl[i] = outChars;
  }
 return resUrl;
}

現(xiàn)在可以直接使用該方法,可以等到下面四組值:
ShortUrl(
http://www.me3.cn)[1];  //得到值3ayQry
ShortUrl(
http://www.me3.cn)[2];  //得到值UZzyUr
ShortUrl(
http://www.me3.cn)[3];  //得到值36rQZn
 在存放這個URL的數(shù)據(jù)方面,我個人推薦TTServer,有的朋友可以沒有聽說過,下面是這個數(shù)據(jù)庫的介紹:

Tokyo Cabinet 是日本人 Mikio Hirabayashi(平林幹雄)のページ 開發(fā)的一款DBM數(shù)據(jù)庫(注:大名鼎鼎的DBM數(shù)據(jù)庫qdbm就是他開發(fā)的),該數(shù)據(jù)庫讀寫非常快。insert:0.4sec/1000000 recordes(2500000qps),寫入100萬數(shù)據(jù)只需要0.4秒。search:0.33sec/1000000 recordes (3000000 qps),讀取100萬數(shù)據(jù)只需要0.33秒。

可以看到對于字典類型的數(shù)據(jù)Key/Value的查詢,這個數(shù)據(jù)庫可以說是我目前見過效率非常高的,況且他如此的小巧,用來對short url/long url的配對再好不過。

該系統(tǒng)使用6個短碼字符來表示任何長度的網(wǎng)址。 有效的字符代碼是ASCII 'A'到'Z'和'0'的'5',其中每個字符包含2 ^ 5(32)狀態(tài)。  6短碼字符可用于繪制32 ^ 6(1073741824)的網(wǎng)址

首先,你需要一個數(shù)據(jù)庫表來存儲和檢索你映射的網(wǎng)址。
CREATE TABLE mappedURL (的CREATE TABLE mappedURL(   
shortCode char(6) not null,   
lognURL  text not null,   
PRIMARY KEY  shortCodeInd (shortCode),   
);   
 

其次,你需要定義一個算法將長的URL映射到短的URL。 算法上面已經(jīng)介紹過了。

第三,你需要創(chuàng)建一個網(wǎng)頁,從數(shù)據(jù)庫的短網(wǎng)址的映射找到原始的URL,并重定向之

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP