

TinyURL设计方案 -- PHP -- IT技术博客大学习 -- 共学习 共进步!
source link: https://blogread.cn/it/article/1650?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

TinyURL设计方案
现在貌似TinyURL很火爆,也逐渐成为一种流行趋势。
对应于PHP版本的TinyURL也有一些算法,其实本质上来说是一种hash。
除此之外,还有另外一种TinyURL方案,类似于http://img.ly。
其实这种设计是最简单的,没有使用hash,而是递增,这种的好处就是数据库可以无限扩展,并且不会重复。
我们可以想想一下,我们只用大小写字母来表示,如果三位的话,就可以存储52*52*52=140608的URL,如果是4位的话就成了52*52*52*52=7311616,这个数量是几何级增长,并且搜索速度非常快。
PS:如果你觉得这不够用的话,你还可以把数字加进去:)
我刚才测试了下,我新建了一个表:
CREATE TABLE IF NOT EXISTS `url` ( `id` int(11) NOT NULL auto_increment, `tiny` char(10) character set utf8 collate utf8_bin NOT NULL default '', `url` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `tiny` (`tiny`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; |
注:使用utf8_bin是为了区分大小写。
然后我往表中添加了100w条数据,下面是我的算法,非常简单,还可以再优化:
function getTinyUrl($num) { $alpha = array_merge(range(65, 90), range(97, 122)); if($num < 52) { return chr($alpha[$num]); } else { $tiny = chr($alpha[$num%52]); while(($num = (int)($num/52)) >= 1) { if($num<=52) { $tiny .= chr($alpha[$num-1]); } else { $tiny .= chr($alpha[$num%52]); } } return strrev($tiny); } } |
从1开始,每个数字就可以生成一个唯一的标识符,然后插入到数据库中。
这时候我执行了一条SQL语句:
SELECT * FROM `url` WHERE tiny = 'DzPM' |
在PHPMyAdmin中显示此条SQL执行耗费的时间是0.0003秒。
那如何运用在实际的项目中呢?
你可以每次执行插入SQL语句后,把返回的mysql_insert_id存到一个文件中,下次再读取一下,用这个数字来生成TinyURL。
当然,如果你有Memcached的话,直接放到这里面速度会更快。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
Recommend
-
27
原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR
-
3
VIM 设置缩进 -- Linux -- IT技术博客大学习 -- 共学习 共进步! 您现在的位置:首页 -->
-
8
您现在的位置:首页 --> MySQL --> Mysql长连接 Mysql长连接 浏览:2650次...
-
5
wget 的使用 浏览:4088次 出处信息 Wget 的使用 1)支持断点下传功能(2)同时支持FTP和HTTP下载方...
-
8
您现在的位置:首页 --> MySQL --> Mysql where vs having Mysql where vs having
-
6
小心grep 的buffer 浏览:2652次 出处信息 在统计mysql查询次数时,有如下命令:while :; do sleep 1; ...
-
8
nginx的配置文件 浏览:8265次 出处信息 记录一下,省得每次都到处找。几个关键地方都有注释,基本看得...
-
5
TCP 的那些事儿(下) 浏览:4808次 出处信息 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看...
-
5
您现在的位置:首页 --> 互联网 --> 杀毒软件 免费的! 杀毒软件 免费...
-
11
网站首页的设计 浏览:1068次 出处信息 网站首页的设计是一件非常让人头痛的事。虽然她看上去很简单...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK