10GT:NoSQLFan实验室的作品

10GT(10gt.com)是在我学习NoSQL知识之余的一个小项目,我把它称作NoSQLFan实验室的作品。因为10GT存在的另一个身份是NoSQL技术的试验田,10GT在存储上全部采用NoSQL技术,目前主要采用了MongoDBRedis

10GT是什么?

10GT是一个发现分享的小社区,我希望你可以在上面发布你觉得好玩或者有用的信息,同时在上面你也能看到其它人分享的信息。而这一切,都基于NoSQL存储。

内容存储

10GT的内容分为主题和回复两大块,这两大块都在MongoDB中进行存储。MongoDB的schema-free特性非常适合主题中tag的存储和检索。

10GT中对用户,主题和回复都会生成一个唯一的自增ID,这是通过MongoDB的findAndModify命令实现的。

消息队列

10GT中的站点日志,搜索,消息提醒,都是通过消息队列在后台完成,而这个消息队列是通过Redis的list结构实现的。

搜索提示

10GT提供搜索提示功能,这里包含了两块内容。

一块是对tag的搜索提示,比如你输入m,搜索提示会提示你mongodb,mongohub这些标签,而输入r,搜索提示会提示你redis,redis cluster这些标签。这一功能的实现也主要采用了Redis,通过将标签进行前缀切分,比如redis会被切分成r,re,red,redi,redis等几部分,以这些前缀作为key,我们用一个zsets结构来存放所有包含这些前缀的tag,这样当你输入一个r的时候,我们就能从zsets里取出相关的tag了。

类似的,主题检索的提示也是类似的,不同的是并非采用前缀切分的方法,而是做了标题分词,比如“NoSQLFan是个好网站” 这句话,可能会被分出“NoSQLFan”,“网站”两个词,通过这两个词作为key构建zsets,我们就能够将所有包含某一关键词的主题放到同一个zsets中。这样当你输入NoSQLFan时,所有标题中包含NoSQLFan的文章就被检索出来了,其实也就是用Redis存储倒排索引信息。目前我们暂时不考虑做正文的全文索引。

可能你会问,上面两个为什么要用zsets,用set不行吗?原因是我们会对检索内容添加权重,并将这个权重作为zsets的score值,权重主要由下面两部分构成,一是对应的tag被添加的次数,或者对应的主题被回复的次数,二是对应的tag或主题在搜索提示中被点击的次数。因为我们认为搜索提示出现后,用户点击越频繁的,越是其需要的结果,所以每个用户的点击,都会计入对应tag或主题的权重,这样通过zsets的自动排序,我们就能给出更合理的提示。

关于10GT与NoSQL和NoSQLFan的关系,就先讲到这里。10GT今天正式开放,欢迎大家来10GT分享有意思的主题。猛击这里

anyShare赠人玫瑰,手有余香,分享知识,德艺双馨!
          

无觅相关文章插件,快速提升流量

分类 MongoDB, Redis · tag , ,