Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85826
  • 博文数量: 26
  • 博客积分: 619
  • 博客等级: 中士
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-04 18:16
文章分类

全部博文(26)

文章存档

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:

阅读(5776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~