小菜我准备写一个简单的论坛,如果要实现像知乎的点赞功能,记录一个帖子的点赞数和对应的点赞用户列表,该怎么设计数据库和用什么方法去应对并发读写?

2016-01-16 20:33:29 +08:00
 COLDE
7388 次点击
所在节点    MySQL
7 条回复
bobuick
2016-01-16 20:50:31 +08:00
用 redis 好了, list , smember, set 什么的都满足了
COLDE
2016-01-16 21:17:58 +08:00
@bobuick 好的谢谢,不过 redis 是保存到内存中,万一服务器挂了,不是什么数据都没有了吗?我不太清楚 redis 的数据持久化怎么处理
hayao650
2016-01-16 21:35:13 +08:00
redis 也可以做持久化
penjianfeng
2016-01-16 21:44:37 +08:00
数据库设计用最简单的 key-value 对应,可以建一个 upvote 表,帖子 id+用户 id,这样可以最快速的查看帖子的点赞人数和某用户点赞过的帖子,也可以根据需要建一个帖子点赞数的表,帖子 id+点赞数量.同时建议把这两张表扔 redis,memcache 这类缓存,减小数据库压力.如果是用 go 这类静态性语言,也可以存数据库后扔内存一份,反正 key-value 的也花不了多少内存
heaton_nobu
2016-01-16 21:57:26 +08:00
用户少的时候不需要考虑并发,用户多的时候“赞”的功能其实不是核心功能,是允许数量出现偏差的,页面上只要+ 1 就好,然后请求传到后端慢慢解决
COLDE
2016-01-17 19:10:00 +08:00
谢谢大家,打算用 redis 的 list,用帖子的 ID 做 key,存储对应的点赞用户 ID 的列表
zonghua
2016-02-25 02:08:33 +08:00
@COLDE 要显示点赞的用户头像怎么办?像微信朋友圈。使用 N+1 的关键查询?

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

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

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

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

© 2021 V2EX