短网址的研究和应用

在互联网 Web3.0 以后,社交媒体等对消息体有严格的“短小”要求,长网址已经无法适应和满足用户体验的要求。短网址应运而生。
 
  从技术原理上看,短网址 服务的实现相对简单,将一个长的原始 URL 地址,使用某种映射规则(算法),变成一个相对短的代码,然后使用该短代码附加在某个较短的域名后面,即构成短网址服务。
 
  如有长网址,http://mini.eastday.com/a/190218010142539.html?qid=02160 (46 字符)
 
  使用suo.im短网址服务缩短后变成,http://suo.im/59meIA   (20 字符)
 
  使用980.so的短网址服务缩短后变成, http://mrw.so/50eHSM(20 字符)
 
  这样简缩之后的短网址用在社交网络能够满足 140以下的字数要求,如果用在内容出版上,也会节省版面。由于使用广泛且实现相对简单,网络上有很多短网址服务,据统计已超过 610 种,如新浪,腾讯和网易等都有短网址服务。
 
  1、短网址的技术实现
 
  短址本质上是实现了一个映射函数 f: X -> Y 。 这个映射函数具有两个特点:如果 x1 != X2,则 f (x1)! = f(x2) ;对于每一个 y, 能够找到唯一的一个 x 使得 f(x) = y。短网址编码在技术实现上主要有三种方式:使用数据 库顺序记录映射关系、规定算法实现直接映射和随机生成ID。
 
  2、短网址使用算法直接映射
 
  使用算法直接将长网址映射到生成的短网址编码上的做法,不需要处理自增长的 ID 记录——无论长网址的 数量增加到多少,使用该种算法所生成的短网址代码的长度总是一致的。比如网上常见的一种短网址代码的算法:
 
  ①将长网址用 MD5 算法生成 32 位特征码,将其分 为 4 段,每段 8 个字符;
 
  ②对这 4 段循环处理,取每段 的 8 个字符, 将他看成 16 进制字符串与 0x3FFFFFFF(30 位 1) 做位与操作,超过 30 位的忽略不计;
 
  ③将每段得到的这 30 位又分成 6 小段,每段 5 位的数字作为字母表 的索引取得特定字符(2 的 5 次方,32 进制),依次进 行获得 6 位字符串;
 
  ④这样一个 MD5 字符串可以获得 4个 6 位字符串,取里面的任意一个就可作为这个长网址的短网址代码。这样就无需关心由自增形成的 ID 号的处理。但显然,这种方式的地址表达空间是有限的。
 
  由此可知,这种方式最大只能表达 10 亿个长网址,超出则会发生冲突而出错。由于转换过程中丢失了 2 位, 后续又是从四个代码中随机选取,实际发生冲突的概率应该远小于 10 亿——这对于现在的互联网来说,是不能满足需求的。根据数据统计,谷歌 2012 年已经抓取了超过 500 亿个页面(-R/82SI)。

码人网mrw.so缩短网址文章图片
 
  3、短网址数据库顺序记录
 
  这种方式是使用数据库存储长、短网址的映射关系,根据长记录的存储先后,每存入一条长记录,则对应的 生成一个 ID 号。为了更加简短,需要将该10进制的 ID 号进行更高进制的转换,比如使用 16、32、36、62 进制 等,从而使得地址编码更加简短。从现有各个短网址服 务地址形式看,多数使用了 62 进制,也即编码字符的集 合为 {0 9, a z, A Z} 。