mysql设计用户标签库_针对Tag/标签的数据库设计思考 | 学步园

标签/Tag对一个系统能提高信息的智能匹配程度,且不谈什么语义网络,就说说网络书签Delicious,其Tag系统就做的很好,通过用户的标签和热门标签,人们很容易发现热门的感兴趣的信息,组织信息也非常方便。那么数据库系统如何设计这种Tag标签呢?

6cedb6f2300103ad5f1242c3846842fd.png

Philipp Keller提出了4种方案,并做了MySql的性能测试:

8e0a73ac1cd46a112fe9829b90efd731.png

基本上这4种方案是:

1. 一个表,里面有个tags字段,存放以空格或逗号分隔的标签。缺点是长度受限,tag个数受限,查询like ‘%abc%’效率低

2. 同上,支持全文索引,或者用Lucence索引查询

3. 两个表,第二个是tags表,存放第一个表的外键和tag的名称。解决了第一个方案的个数受限问题。

4. 三个表,第二个tags表,第三个关联表,典型的3NF,最常规的设计,tag支持树状层级,缺点是千万级数据量的话关联表会非常大!

bdc16f6d649ba74a0db533787776cee4.png

还有第五种第六种方案,比如增加缓存层,把例如针对”TagA+TagB”的查询缓存1小时,增加冗余列,例如TagA, TagANumber(内容个数), TagB, TagBNumber …

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值