微信、微博的点赞功能是怎么实现的?

2017-08-02 17:57:45 +08:00
 klausgao
本来以为很简单的,但是如果是一个 timeline 列表,有很多的各个 up 主的点赞内容,难不成是循环 sql 取出点赞列表?效率那么低也不对吧?
11392 次点击
所在节点    程序员
31 条回复
geelaw
2017-08-02 18:05:03 +08:00
请先把你的问题描述清楚
nutting
2017-08-02 18:07:52 +08:00
这种一般都是 key value 的数据吧
breadenglish
2017-08-02 18:08:59 +08:00
mongoDB 之流
whatsmyip
2017-08-02 18:29:32 +08:00
redis list 就可以做到吧
sobigfish
2017-08-02 18:36:14 +08:00
timeline 列表里获取每个点赞的用户是伪需求吧, 只要知道个数就行了 cache 一下点赞数
klausgao
2017-08-02 21:18:57 +08:00
@sobigfish 怎么是伪需求啊?微信朋友圈不是吗?
klausgao
2017-08-02 21:19:31 +08:00
casparchen
2017-08-02 21:23:53 +08:00
graph database 最适合这种了
ericbize
2017-08-02 21:55:48 +08:00
我就记得 上 Database system 的时候老师说过,当年 FB 被点赞点到数据库挂了。
owenliang
2017-08-02 22:42:41 +08:00
文章表,点赞表,留言表,根据文章 ID 查出点赞和留言。。。不知道楼主说的循环是什么意思。。
iyaozhen
2017-08-02 22:51:06 +08:00
[再通过内容的 ID 循环取出各个内容的点赞人和回复的内容,但是这样的效率就很低了。 ]
不慢吧,每个内容的点赞人和评论存 MySQL 的话一把也就差出来了
iiduce
2017-08-02 22:51:34 +08:00
在 mongodb 中使用 EmbeddedModelField 字段放置点赞信息 model,同时最好添加一个点赞数字段。

如果是 sql 数据库,应该使用存储过程?好些年没用 sql 了,记不清了。
klausgao
2017-08-02 22:52:48 +08:00
@owenliang 那是个 timeline 啊,有很多的文章
klausgao
2017-08-02 22:53:24 +08:00
@iyaozhen timeline 有很多文章啊,要查很多次啊
iiduce
2017-08-02 22:54:54 +08:00
更正:mongodb 应该是放置 ListField(EmbeddedModelField(赞 model), null=True, blank=True)

我的系统中是这样写的:
favorites = ListField(EmbeddedModelField(favorite), null=True, blank=True)
favorite_num = models.IntegerField(u'喜欢数目', default = 0, db_index=True)
geelaw
2017-08-02 23:43:54 +08:00
可以 join 啊……你把状态的表和评论的表 join 一下咯,这样就会得到状态和每条评论,然后再按状态分组,格式化,返回。
rootx
2017-08-03 01:43:10 +08:00
key-value 形式存 json 数据如何?只要取出当前 ID 的 value 数量和内容就都出来了。
klausgao
2017-08-03 08:55:01 +08:00
@geelaw 谢谢,这个似乎是最好的方案了
Ouyangan
2017-08-03 09:32:03 +08:00
@geelaw #16 分库分表的时候一般不 join....
klausgao
2017-08-03 10:46:31 +08:00
@Ouyangan 是哦,有这个问题。请问你们公司是怎么解决的?

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

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

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

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

© 2021 V2EX