Mysql存储“Facebook喜欢”之类的东西

时间:2013-04-19 16:35:59

标签: php facebook facebook-like

我必须创建一个类似的系统(名称不会像“喜欢”,Facebook拥有它)。 所以我想象了两种在我的数据库中存储这些喜欢的方法,我想知道,对于流量非常高的站点,哪种方式更好。

  1. 使用“id”,“comment_id”,“user_id”单元格创建表comment_likes。在comments表中存储“like_count”,所以当我需要写出来时,我不需要计算它。但喜欢很容易做的事情,所以人们会创建很多,如果我需要列出指定的评论喜欢,我需要阅读整个comment_likes表并找到所有user_ids。这可能是未来数百万行。如果1000个用户同时执行此操作,我的系统将会死亡。
  2. 我的第二个想法是,在评论表中存储喜欢的内容。用这样的user_ids列表创建一个名为“likes”的单元格:1#34#21#56#.... 所以当有人喜欢/不同于评论时,只需CONCAT或用#替换他/她在这个单元格中的id。当我需要列出指定的评论时,只需在#-s。
  3. 中展开此列表

    我认为第二名可能更快更聪明,但你怎么看待这个?

1 个答案:

答案 0 :(得分:1)

第一个选项要好得多,因为您可以获得关系设置的好处。例如:如果您想从userId x喜欢的数据库中获取注释,该怎么办?通过第一次设置,这是一个快速而简单的查询。在第二种情况下,您将不得不使用LIKE,这会慢得多且不准确。 (想象一下userId为1,注释表中的likes字段包含#10 - 如果您使用LIKE'%1%',它将返回注释。)

即使是高流量的网站;只需在commentId上使用索引就可以使其快速运行。

所以选择第一个选项。

如果你真的怀疑第一个选项的速度,可以在评论表中创建一个“缓存”字段,在其中计算喜欢的数量,这样你就不必执行子查询来选择相同的数量