2012年11月13日星期二

Node.js+MongoDB实现短域名功能——开源项目short

MongoDB是一个分布式的文档存储数据库,数据用二进制的JSON格式BSON存储。

设计一个存储博文的数据库表,如果使用关系型数据库,博文本身用一个表存储,评论用另一个单独的表存储,而使用MongoDB,评论可嵌入博文表,一篇完整的博文,其相关信息只需存放在一个表中:




















下面来看如何使用Node.js和MongoDB实现短域名功能,主要用到Node.js的Mongoose模块。

首先设计短域名在MongoDB中的保存结构,除原URL、短域名这两个字段要存储外,还可以存储生成时间、访问者等与短域名相关的信息,表结构如下:












以上URL表示缩短前的域名,hash表示短域名。

其次考虑接口,接口很简单,一个接口generate用于接收URL,返回短域名;另一个接口retrieve接收短域名,返回原URL。

最后需要设计一个hash函数实现URL与短域名关联,hash函数供generate函数调用。

generate函数:













以上用到mongoose的save接口,往mongoDB服务器保存短域名数据。

retrieve函数:










findByHash函数中,调用mongoose的findeOne接口,findeOne根据传入的hash值,在mongoDB服务器中查找相应的短域名条目。完成查找后,findByHash再调用mongoose的update接口更新短域名条目中的hits等字段。

hash函数:


hash函数很简单,一个URL通过hasher对应到一个长度为6的 [0-9a-zA-Z]字符串。

调用以上generate接口,完成 URL为 http://nodejs.org/,以及URL为 http://bangerlee.blogspot.com/ 的短域名生成后,使用mongo进行数据查询,我们可以看到:





















有了以上短域名功能,我们可以进一步搭建一个提供短域名跳转的服务器,其核心是根据hash,调用retrieve函数,从MongoDB服务器上获取相应的URL,完成域名跳转:


































执行以上服务器程序,然后在地址栏输入 http://localhost:8080/GHJwvl ,回车之后就会跳转到 http://bangerlee.blogspot.com/ 。

Have fun!

没有评论:

发表评论