V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hanyu5166
V2EX  ›  Node.js

社交应用 用户兴趣标签 数据结构设计?

  •  
  •   hanyu5166 · 2021-04-01 09:07:21 +08:00 · 2950 次点击
    这是一个创建于 1321 天前的主题,其中的信息可能已经有所发展或是发生改变。

    社交应用中常有 用户选择自己的标签

    1.每个标签有所属的分类

    问题详情移步: https://segmentfault.com/q/1010000039746781

    这样的标签系统,在数据库中都是怎么设计才好呢?^_^!

    12 条回复    2021-04-01 17:39:43 +08:00
    egglin
        1
    egglin  
       2021-04-01 10:05:58 +08:00
    问就是图数据库
    airqj
        2
    airqj  
       2021-04-01 10:32:08 +08:00   ❤️ 1
    这东西用不着图数据库吧
    用户选择的标签字段设计成 json,里面弄个数组存标签 id
    xuanbg
        3
    xuanbg  
       2021-04-01 13:38:11 +08:00   ❤️ 1
    @airqj 你这样没法根据标签拉用户列表

    一般就是一张用户标签表,里面 3 个字段:id | user_id | tag
    aragakiyuii
        4
    aragakiyuii  
       2021-04-01 13:50:54 +08:00
    用位图
    airqj
        5
    airqj  
       2021-04-01 14:40:03 +08:00
    @xuanbg 看了一下楼主的需求,好像没说有根据标签拉用户列表的需求
    有这需求的话你这方案确实更好 :)
    SlipStupig
        6
    SlipStupig  
       2021-04-01 14:43:48 +08:00
    看什么类型数据库吧,如果是 NoSQL 和图数据库,基本上都好说。
    主要说一下 MySQL 类数据,tag 或者主题类的东西并不稳定可能会经常变动,也有可能是用户自我添加的,后期可能会有画像需求,所以我个人认为最好的办法是新增两张表:

    - tag_types:存储用户的 tag,需要有个主键和 tag 唯一标识,tag 名称
    - Identity_tags: 里面存储一个主键、userid 、tagID 、还有时间戳,而且需要对用户 ID 和用户信息表做一个外键,防止意外

    这个设计虽然会比较浪费存储,但是做画像、推荐都会很方便。虽然 Bitmap 效率很高,但是可读性不太行操作起来也方便
    tabris17
        7
    tabris17  
       2021-04-01 14:46:37 +08:00
    tags 字段,存字符串,逗号分隔或者 json,如果是 postgresql 的话可以保存为数组

    问题在于你要将这些 tags 数据用于哪些场景,比如计算余弦相似度之类的
    xuanbg
        8
    xuanbg  
       2021-04-01 17:00:14 +08:00
    @airqj 应该会有这种需求的,不然打标签做咩?就是看看有个毛意思。
    simonlu9
        9
    simonlu9  
       2021-04-01 17:05:15 +08:00
    这种 用一个 user_label 表存就可以啦,然后持久化到 es,新增用 mysql,查询也是 es,爽得一逼
    nigulasida
        10
    nigulasida  
       2021-04-01 17:13:05 +08:00
    postgresql 的位图扩展
    tiedan
        11
    tiedan  
       2021-04-01 17:20:47 +08:00
    mongodb 就简单一些了直接用数组存
    hjosama
        12
    hjosama  
       2021-04-01 17:39:43 +08:00
    如果是我的话第一时间想到 json,第二时间想到同一个用户+多个标签的表,如果是非常棒的项目可以设计得很好,否则上线就下线那种,还是用我的方法吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.