关于标签的的效率和准确性研究

我的标签表结构设计还有查询。的确是存在一些问题。当初我敢说。TAG的想法刚被流传的时候。我就开始注意到这个功能了。所以在国内主流的PHP开发的BLOG程序中,是第一个支持此功能的。以前有人和我说过。现在又有高手提起。我的标签的确存在着两个问题。感谢yake.chen@dudu-inc.com

Tag功能的表结构设计存在一定问题。目前是通过模糊搜索查询方式来匹配标签,进而通过标签来匹配到文章。这个实现方式有两个致命的缺点:

  1. 大数据量下标签搜索的效率问题。
  2. 标签匹配的准确性问题。(所记录的标签出现条数并非模糊搜索显示出的条数)

的确。本来刚有人和我提出的时候,我就把改善TAG表列入计划中。可是后来忘记了。结果这次发布的测试版后。高手又提出了这个问题。才让我想起来。的确要改善。

因为标签是个 多对多的结构体系  一篇文章可以有多个标签,一个标签可以对应多篇文章。所以一般性的解决办法是为标签结构使用两个表来描述。

你现在的标签表算一个,另外一个记录标签和文章标签的关系。

比如建立一个表tag_relation 三个字段  tid, article_id, tagid每插入数据库一个标签的时候同时更新这两个表。tag_replation的tagid字段对应你的tags表的tagid,tag_relation 表的tid是个自增的主键记录每次入库的tag。article_id是此tag对应的文章id,这个表记录的基本只是数字型的ID值所以存储空间消耗不大且实现了高效精确匹配的问题。

我自己也想了想关于标签的表结构的问题。如果不用另外一个表记录关联字段,而是用tag表的一个字段来保存一个关联ID,也是一个比较好的办法吧??比如:

Field tagid tag usetime aids
Value 1 angel 5 1,3,4,8,5

这样的话,我必定要先从URL获取name,也就是:

http://www.4ngel.net/blog/angel/?action=tag&item=angel 
select aids from tags where tag='angel'    1 query

然后再来
select * from articles where articleid in (aids)   2 queries

这样效率问题也解决了。准确性也解决了。不知道大家还有没有其他的看法。如果使用另外一个表来放关联字段。那不是还要来一次LEFT JOIN?

希望各位多多交流技术。

Tags: 标签, 效率, tag

上一篇: SaBlog-X进入测试阶段
下一篇: 提供FCKeditor、TinyMCE、eWebEditor精简版

相关文章

访客评论

angel你好?我有个问题,如果一个标签对应几千文章,用你的方法查询文章的时候会不会比较慢呢?不知道是单表快还是双标快?
Post by sih on 2007-06-03, 12:18 AM #21
这个嘛。就没有测试过了。。我想有可能是双表快吧。毕竟都是数字类型的饿。
Post by angel on 2007-06-03, 7:40 AM #22
Total:22‹ Prev123

发表评论

评论内容 (必填):

My E-mail