Web2.0里面的Tags功能的实现

刚才看了看飞扬新锐的blog系统,发现使用的是zblog,里面有了现成的tags系统,今天找了一天的tags系统的实现总是不得要领。没有办法,下载zblog的源代码,开始研究一下了。

实现的方法为建立一个blog_tags表存储tags的信息,包括id,name和count and tagurl,以及以后可能用到的intro和其他的附加信息。另外的article表里面有一个tags属性,里面的值为{1}{2}之类的,这个里面1、2其实就是blog_tags表里面每个tags的id。想到添加blog文章的时候他们添加tag的时候估计是把用逗号或者其他分离的tag拿出来分别和blog_tags表比较看看存在了没有,若没有存在就添加,存在则tag的count +1.然后就是tags图的实现方法就是提取blog_tags表里面所有的记录(或者前n条),然后是标准的12px的字体上面根据热度(tag的count)调整字体的大小(12px+(count/2)px)。基本上所有的基于一个简单blog的tag系统就搞定了。不过还是有很多问题需要解决。

1、 如果是每次读取一片新文章的时候都要进行联合查表,现查询article表取出tag属性,在查询blog_tags表取出tags的名称等信息。这样可不可以在article里面直接就存放tag的名称,他的tag的url就直接简单的做tags.aspx?name=tagsname.这样有些方便,不过不知道可不可行。这样就不用联合查表了。

2、 用户tags少的时候用这种方法实现效率几乎不用考虑,如果做成一个成熟的,有几十万个tags的时候是不是还合适啊,速度怎么样啊。这个是个疑惑,没有经验只能凭空猜测了。

3、 Tag的产生可不可以不用输入,而是直接使用lucene.net来做,抽出来tags可能效果和效率更好一些,看了博客园一个兄弟的文章,感觉可行的同时有感觉是不是系统占用的资源更多了,服务器的压力更大了。

是不是有其他的办法,比如豆瓣那种大规模有几百万个tags的系统如何实现的tags系统呢,有没有兄弟给出一点意见呢。

posted @ 2007-03-20 07:35 JesseZhao 阅读(3816) 评论(19)  编辑 收藏 所属分类: C Asp.net

  回复  引用  查看    
#1楼 2007-03-20 08:26 | henry      
合理的定义索引,几十万或几百万的查询基本不是什么问题.
主要是控制好获取的数据量就可以了.
  回复  引用  查看    
#2楼 2007-03-20 08:38 | huacn      
这个简单呀
你把 用 12,55,128,95,27 这个东西再分成一个
ArticleTags表 来实现 文章表与 Tag表的多对多关联
字段如下:
id tagid articleid
1 5 12
2 15 125

如上面的表结构,这样处理起来就好多了
  回复  引用    
#3楼 2007-03-20 09:19 | shalala[匿名] [未注册用户]
这样的文章放在首页,似乎……
  回复  引用  查看    
#4楼 2007-03-20 10:32 | 一醉解千愁      
如何实行tags,实际上是业务的问题,技术只是辅助.

对于大量的tags,比如youtube,个人认为他们是将tags分开进行保存,
对于具体的文章,他们有自己的tags属性,而对于全局来说又有专门的表用于存储tags的统计信息.

关键的就是冗余存储.
  回复  引用  查看    
#5楼 [楼主]2007-03-20 11:20 | JesseZhao      
@huacn
多对多的关联表这个是应该实现

  回复  引用  查看    
#6楼 2007-03-20 11:57 | GoGoSonny      
TrackBack怎么用?
  回复  引用  查看    
#7楼 2007-03-20 12:28 | 杨发达      
冗余存储 没有错。
要想快,就要这样做 。

  回复  引用  查看    
#8楼 [楼主]2007-03-20 12:42 | JesseZhao      
减轻服务器的压力,查询速度再快点,我看也就是只能冗余的存储了

  回复  引用  查看    
#9楼 [楼主]2007-03-20 12:43 | JesseZhao      
大家还有没有其他的方面比较好的提出来

  回复  引用    
#10楼 2007-03-20 15:11 | 1 [未注册用户]
*** 不看你吃很大的亏

  回复  引用  查看    
#11楼 2007-03-20 23:04 | Jeffrey Zhao      
冗余存储的确是个可行的办法。
不过这里做个缓存就可以了,几十万的Tag也不占什么内容。
其实一个大型应用,缓存实施的如何,并不亚于数据库设计的重要性。因为往往用户“查询”数据的次数会远远大于修改。
  回复  引用  查看    
#12楼 2007-03-21 08:38 | yunhuasheng      
@Jeffrey Zhao
@henry
感觉说的都有道理.
  回复  引用    
#13楼 2007-09-24 13:15 | Franklin [未注册用户]
我要知道tag是如何做出来的
  回复  引用  查看    
#14楼 2007-12-28 21:18 | woog      
非常有用的东西。做个标记。
  回复  引用    
#15楼 2008-04-15 14:08 | Lisces [未注册用户]
用lucene之类的做分词tag 证明你根本还没有理解tag的用处
tag的最大一点用处就是内容无关性
  回复  引用    
#16楼 2008-07-10 09:28 | 1111 [未注册用户]
@一醉解千愁

  回复  引用    
#17楼 2008-07-10 09:33 | atlas [未注册用户]
@Lisces
与内容无关,还用得着标签嘛?