作者gpmm (银色)
看板PHP
标题Re: [请益]如何设计 facebook , g+ 按赞或者+1的功能
时间Sun Mar 24 16:03:36 2013
※ 引述《tao2tw (smile_ting)》之铭言:
: 有个问题想与各位前辈讨论,
: 我们都知道 facebook 有 按"赞"的功能。
: 如果把一篇文章当做一个 table 中的item 。
: 姑且称之 Post item .
: 该Post item 可能包含许多栏位
: owner_id , content , date , ...
: 那麽如果要实作按赞功能,
: 就需要新增一笔 like 栏位 到 Post Table
: 如果有user C 针对该篇文章 "按赞"
: 该 Post item 的 like 栏位 , 就会被 update , 并且增加 点赞人的user_id ?
: 比如说原本该POST 按赞人数 已经有两人 "A,B"
: 则ABC按下去之後 先读取 users = "A,B"
: 接下来 users+=","+current_user_id
: 将 "A,B,C" 回存
: 感觉上似乎有一点没效率。
: 但是直觉上的想法大概就是这样,不晓得前辈是否有更聪明的想法?
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 119.77.136.156
: → FMDream:我会选择在开一个表 post_item uesr_id is_like 03/24 14:56
: → kerash:这样设计会变成只要有一个人按赞其他人都会跟着变赞或者 03/24 14:57
: → kerash:别人按赞自己的纪录会被 update 掉吧 03/24 14:58
: → hSATAC:再开个表 原本表只记按赞数 03/24 15:04
: ※ 编辑: tao2tw 来自: 119.77.136.156 (03/24 15:22)
: 推 kerash:我会用一楼的作法 03/24 15:32
刚好哄完小孩睡觉来回一下文…
我们公司的产品正好有类似的功能(叫做「棒」 XDD),
可以提一下我们是怎麽做的,
首先声明我的资料库颇弱,所以方式不一定是最好,
希望有其他前辈愿意出来指点一二
(其实这篇好像应该算是 Database 的范围?)
我们家的作法和推文的大大们所说的差不多,
一共有两个表,post / post_like (加上 reply / reply_liek 就是四个表了),
post 纯记 like 数量,
post_like 塞 post_id + member_id,
所以每次按赞就是:
1. 去查 post_like 的纪录,这个 user 有没有赞过这篇文章
2. 没有赞过,post_like 新增一笔
3. 新增成功的话,post 的 like += 1
展开版面上的文章时:
1. 取出可以被浏览的 post
2. 拿所有 post id + user id 去 post_like 拉 like 纪录
3. 穿插「棒」、「你说这真棒」、「你和 xx 人说这棒」之类的进文章尾
这样解应该是很基本的方式,
另外有个好处是 post_like 这张表根本就是 key-value pair,
很适合直接用 memcache 或 redis 直接从记忆体作掉(拉和塞都是)
然後定时 crontab 更新 post_like 就好
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.175.40.79