2011年(26)
分类: 系统运维
2011-04-24 19:39:36
大家在微博上已经看到了许许多多的短链接,自然也希望了解其原理。
需求:双向映射,长链接可以映射成唯一的短连接,短连接也能反映射到一个长连接。
最简单的实现方式:
$longUrl => $shortUrl,建一个数据库,加一条就往数据库存一条,然后用UID作为 $shortUrl值。
这样会遇到的问题:
1、查询问题,当新插入一条$longUrl时,需要先查询一下,这条数据是否存在,那么这样的查询效率将非常低下。
2、UID的长度问题,当收录的长链接越来越多时,将面临$shortUrl也不短的问题,不能满足我们想要的效果。
解决问题1:
既然对于$longUrl查询会有问题,是否可以将$longUrl散列到对应值,那么再根据散列值做短连接的映射。虽然这是一个可行的方案,但也存在相应的问题,即散列算法的问题,理论上的一个好的散列算法是不会出现碰撞现象(指两个不同的值通过散列算法后得到的值是相同的),但是目前我们所使用的散列算法是存在碰撞现象的:MD5、SHA-1。
虽然问题的确是存在的,但是概率还是极低的,而且即使出现这种问题,对于短连接的服务是可接收的,毕竟而且这个跟钱没有挂钩。
解决问题2:
如何再次将UID的长度变短,这个的解决方法就简单多了,目前tweeter采用62进制的方法,将UID通过62进制进一步缩短$shortUrl的长度,关于62进制的算法,大家可以自己上网搜,一大堆。
只要解决这些问题,相信短链接的技术就非常好实现了,相信大家就很好解决这些问题。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下谈谈个人对短链接的看法:
1、安全问题,目前许多浏览器已经对短链接进行安全提示(当然这有一些商业上的问题,比如流氓企鹅)那么如何对短链接进行安全过滤,或者说对短连接进行垃圾过滤,这个对提供短链接公司来说非常重要,否则用户将来不会愿意去打开一个存在潜在风险的地址。
2、.....还没有想好
url: