`
dbwang
  • 浏览: 57178 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

微薄短域名原理及作用

阅读更多

最近呀。微博在国内火的的”一塌糊涂“。作为技术人员对其中的短域名比较感兴趣,很好奇这么做的原因,及实现这个的原理!希望知道的进来讨论一下哈!

 

例如:http://url.cn/1zJdGX  解析以后是 http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm

 

 

补充:

 

经过讨论这么做的好处大致:

 

1.广告效益,方便记忆!!

 

2.方便做统计和挖掘。每一次点击和引用服务提供方都有记录和跟踪。

 

3.可能也是为了避免同样的链接被大量用户引用,缩短链接长度以便节省存储空间,微薄的用户关注的都是一些热点话题,用户发的不同微薄中出现同样的链接是比较常见的。

4.存储到数据库可能是纯文本???待讨论!

 

 

实现原理:

 

基本是上通过key,value的方式进行存储。但是最终存储在nosql,还是关系数据库,需要进一步讨论》》》

 

大家继续给力哈!!

 

 

分享到:
评论
26 楼 diogin 2011-03-30  
晕,代码变成表情了。表情部分是“8 )”。
这样生成的空间理论上有 2^30 约10亿个,不过随着量的增多,肯定会出现碰撞。
25 楼 diogin 2011-03-30  
核心只是一个进制转换算法。比如 PHP 实现:

function shorten($url, $salt = '') {
    $base62_units = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $base2_unit30 = (('0x' . substr(md5($url . $salt), 0,) * 1) & 0x3fffffff;
    $base62_unit6 = '';
    while ($base2_unit30 > 0) {
        $base62_unit6 .= $base62_units[$base2_unit30 & 61];
        $base2_unit30 >>= 5;
    }
    return $base62_unit6;
}

for ($i = 0; $i < 100; $i++) {
    echo shorten($i) . '<br />';
}

生成的短地址做 key,原地址做 value,存到一个 kv 数据库里。
24 楼 dbwang 2011-03-30  
lotusk 写道
这个其实最主要的不是为了长度,而是为了中国特色的过滤机制,要把某些链接XX

??说的详细一些。

我怎么感觉不是你说的意思呢。
23 楼 lotusk 2011-03-30  
这个其实最主要的不是为了长度,而是为了中国特色的过滤机制,要把某些链接XX
22 楼 gougou851129 2011-03-30  
shorturl的算法其实很简单的
就是先对地址做运算生成一个唯一串
然后用唯一串和源地址做key value映射即可
解析的时候 通过唯一串找到原地址 然后通过跳转
21 楼 dbwang 2011-03-30  
chan.d 写道
楼主显然对这个问题没有怎么研究


能力不够不知道怎么去研究人家的实现。只能自己在这里猜想一下实现的原理。提出来。供大家指正。

看来你很有想法呀。提出来分享一下呀。我欢迎!!

  ps:看来javaeye的高手真的很多呀。竟然有人投我是新、手帖!!看了得向大家学习啦。竟然有这么多高手就出来分享一下呀。
20 楼 dbwang 2011-03-30  
arust 写道
denger 写道
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。


应该不仅仅是140限制,可能也是为了避免同样的链接被大量用户引用,缩短链接长度以便节省存储空间,微薄的用户关注的都是一些热点话题,用户发的不同微薄中出现同样的链接是比较常见的。


恩恩,提醒我啦。有这方面原因!受教啦!
19 楼 dbwang 2011-03-30  
httpclient_bd 写道
研究过类似的一个高效的实现,当然思路非我原创,也是网上前辈们的经验

实现方式是nginx+tt+tc做转发

具体原理是nginx代理到tt的服务端口

稍微修改一下tt的源码,将tt的http协议返回的东西稍作修改, 原来返回value的地方修改为返回302的http报文,把tc里拿到的value作为location回送给浏览器,重新编译后启动TT,直接访问即可。
TC里KEY为短地址,VALUE为URL

url要有长期性,memcached的特性不适合干这事。

tc=tokyo cabinet
tt=Tokyo Tyrant

LZ有兴趣可以研究一下


没太看懂。稍后补补可。学习一下!
18 楼 dbwang 2011-03-30  
dmhorse 写道
之前刚好看过,分享一下。

def saveLongUrl(String longUrl)
  id = NoSqlDb.get("url:id")
  id++ #Id is hex value. e.g. FF = 256,
  NoSqlDb.set("url:" + id + ":id, longUrl)
  return id
end

申请一个域名 douniwuan.fm

假设上面返回的id为ff
http://douniwuan.fm/ff


调用下面的函数
def onclickUrlId(String id)
  String url = NoSqlDb.get("url:" + id + ":id, longUrl)
  redirectTo(url)
end

下一次保存的短址为
http://douniwuan.fm/100
http://douniwuan.fm/101
...
http://douniwuan.fm/fff


也可以直接在页面生成
<a href="http://www.google.com">http://douniwuan.fm/ff</a>
但这样就不能记录用户行为了。





恩恩。赞!支持!
17 楼 dbwang 2011-03-30  
denger 写道
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。


你这个存储起来需要更大的空间。连接太长啦。

我提到的这块东西。估计会更复杂。在存储里不会存html标签。例如A标签!
16 楼 dbwang 2011-03-30  
weiqiang.yang 写道
有不少开源实现的
比如
http://www.2expertsdesign.com/php/free-url-shortening-scripts

http://yourls.org/
应该不会太复杂,有兴趣可以下来研究研究


恩恩。3Q。有空研究一下!
15 楼 arust 2011-03-29  
denger 写道
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。


应该不仅仅是140限制,可能也是为了避免同样的链接被大量用户引用,缩短链接长度以便节省存储空间,微薄的用户关注的都是一些热点话题,用户发的不同微薄中出现同样的链接是比较常见的。
14 楼 httpclient_bd 2011-03-29  
研究过类似的一个高效的实现,当然思路非我原创,也是网上前辈们的经验

实现方式是nginx+tt+tc做转发

具体原理是nginx代理到tt的服务端口

稍微修改一下tt的源码,将tt的http协议返回的东西稍作修改, 原来返回value的地方修改为返回302的http报文,把tc里拿到的value作为location回送给浏览器,重新编译后启动TT,直接访问即可。
TC里KEY为短地址,VALUE为URL

url要有长期性,memcached的特性不适合干这事。

tc=tokyo cabinet
tt=Tokyo Tyrant

LZ有兴趣可以研究一下
13 楼 chan.d 2011-03-29  
楼主显然对这个问题没有怎么研究
12 楼 螺丝很冷 2011-03-29  
其实我觉得最简单的时间方式就是买下t.cn这个域名,,然后在里面做一个过滤器,对后面的url进行过滤,然后在该服务器上用一个文件村下t.cn后面的url跟真实url的对应关系,,
11 楼 dmhorse 2011-03-29  
之前刚好看过,分享一下。

def saveLongUrl(String longUrl)
  id = NoSqlDb.get("url:id")
  id++ #Id is hex value. e.g. FF = 256,
  NoSqlDb.set("url:" + id + ":id, longUrl)
  return id
end

申请一个域名 douniwuan.fm

假设上面返回的id为ff
http://douniwuan.fm/ff


调用下面的函数
def onclickUrlId(String id)
  String url = NoSqlDb.get("url:" + id + ":id, longUrl)
  redirectTo(url)
end

下一次保存的短址为
http://douniwuan.fm/100
http://douniwuan.fm/101
...
http://douniwuan.fm/fff


也可以直接在页面生成
<a href="http://www.google.com">http://douniwuan.fm/ff</a>
但这样就不能记录用户行为了。


10 楼 denger 2011-03-29  
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。
9 楼 風一樣的男子 2011-03-29  
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?
8 楼 jn615 2011-03-29  
放入hash中存起来就行了
7 楼 weiqiang.yang 2011-03-29  
有不少开源实现的
比如
http://www.2expertsdesign.com/php/free-url-shortening-scripts

http://yourls.org/
应该不会太复杂,有兴趣可以下来研究研究

相关推荐

    一个php短网址的生成代码(仿微博短网址)

    PHP短网址生成代码的实现涉及到几个关键点:字符编码转换、哈希算法的应用以及短网址的...当然,实际生产环境中,短网址服务还会涉及到更多的细节和优化,比如防刷限制、字符替换规则、域名的使用以及访问统计等功能。

    短网址还原程序(UnShortUrl) 2.8.rar

    短网址还原程序(UnShortUrl)用PHP写成,作用就是将这些短网址还原为本来的面目。 支持还原目前流行的各种短网址,如:goo.gl、t.cn、、url.cn、bit.ly等。 原理挺简单,就是通过curl来获取HTTP header的location...

    新浪短网址

    - **生成短网址**:将这个标识符与新浪短网址服务的基础域名结合,形成一个完整的短网址。 - **返回结果**:用户获取到生成的短网址,可以进行分享。 3. **使用场景** - **社交媒体分享**:在微博、微信等平台,...

    php生成短网址/短链接原理和用法实例分析

    在我们的项目当中,如果需要更好传播我们的活动链接,但是链接太长1来是不美观,2来是太过于“笨重”,例如拼多多,淘宝联盟,他们的推广链接都是有短链接的,还有新浪微博。 但是,这些始终都是别人的,我们调用...

    新浪长网址转短网址转换器

    7. **使用场景**:新浪短网址转换器适用于多种场合,如在微博分享链接,避免长链接占据过多空间;在电子邮件中发送短链接,使邮件看起来更整洁;在印刷媒体上使用,因为空间有限,短网址更容易容纳。 了解以上知识...

    推荐一份阿里大厂面试时的几道题目

    - **DNS解析过程**:域名解析的基本原理及其流程。 - **TCP/IP协议栈**:各层协议的功能及其相互关系。 - **网络安全技术**:如何保护网络免受攻击。 #### 8. 邮件发送系统优化 **知识点背景:** 在高并发场景下,...

    PicBed:这是Paul Yuan的图床

    3. **短链接生成**:上传的图片会被赋予一个短链接,这个链接可以在任何支持超链接的地方使用,使得图片分享更便捷。 4. **多平台支持**:PicBed可能支持与多个社交媒体平台、博客系统(如微博、微信、GitHub、...

    最常用的八种网站推广方法

    将有关的网站推广信息发布在其他潜在用户可能访问的网站上,利用用户在这些网站获取信息的机会实现网站推广的目的,适用于关键信息可以在短时间内引起人们广泛关注的情况,特别是一些时效性强的产品信息以及购买信息...

    《计算机网络》第六章 课后答案.pdf

    - **作用对象**:ARP负责IP地址到MAC地址的转换,DNS则负责域名到IP地址的转换。 - **作用范围**:ARP主要用于局域网内,DNS则覆盖整个互联网。 #### 问题6-10: 网关与路由器的关系 - **区别**: - **定义**:...

Global site tag (gtag.js) - Google Analytics