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

2021-04-01 09:07:21 +08:00
 hanyu5166

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

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

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

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

2942 次点击
所在节点    Node.js
12 条回复
egglin
2021-04-01 10:05:58 +08:00
问就是图数据库
airqj
2021-04-01 10:32:08 +08:00
这东西用不着图数据库吧
用户选择的标签字段设计成 json,里面弄个数组存标签 id
xuanbg
2021-04-01 13:38:11 +08:00
@airqj 你这样没法根据标签拉用户列表

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

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

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

问题在于你要将这些 tags 数据用于哪些场景,比如计算余弦相似度之类的
xuanbg
2021-04-01 17:00:14 +08:00
@airqj 应该会有这种需求的,不然打标签做咩?就是看看有个毛意思。
simonlu9
2021-04-01 17:05:15 +08:00
这种 用一个 user_label 表存就可以啦,然后持久化到 es,新增用 mysql,查询也是 es,爽得一逼
nigulasida
2021-04-01 17:13:05 +08:00
postgresql 的位图扩展
tiedan
2021-04-01 17:20:47 +08:00
mongodb 就简单一些了直接用数组存
hjosama
2021-04-01 17:39:43 +08:00
如果是我的话第一时间想到 json,第二时间想到同一个用户+多个标签的表,如果是非常棒的项目可以设计得很好,否则上线就下线那种,还是用我的方法吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX