【问题标题】:What would be a good strategy to implement functionality similar to facebook 'likes'?实现类似于 facebook 'likes' 的功能的好策略是什么?
【发布时间】:2011-05-20 05:46:04
【问题描述】:

我有一个网站,人们可以在其中发布 cmets、图片和其他内容。我想添加一个用户可以喜欢/不喜欢这些项目的功能。

我使用数据库来存储所有内容。

我正在研究几种方法:

方法一:

  1. 向表中添加一个“like_count”列,并在有人喜欢某项时增加它
  2. 添加“user_likes”表以跟踪用户喜欢的所有内容。

优点:易于实现,所需的查询最少。 缺点:项目需要随着点赞数的每次变化而刷新。我有一个缓存项目的完整列表,这将打破。

方法二:

  1. 创建一个新表“like_summary”并将每个项目的总喜欢存储在该表中
  2. 添加“user_likes”表以跟踪用户喜欢的所有内容。
  3. 将like_summary数据缓存在memcache中,只有当值发生变化时才刷新

优点:主要项目表的负载较少,可以缓存而不用担心。 缺点:memcache 的点击次数过多(一个页面显示 20 个项目,需要从 memcache 加载),可能会很慢

有什么建议吗?

【问题讨论】:

  • 如果没有关于预期负载、访问数量以及整体架构和设置的更多信息,这个问题没有多大意义。
  • “实现 facebook 喜欢”是什么意思?您是否希望您的网站复制此功能(没有任何真正的 facebook 链接),或者您是否希望跨网站进行某种 mashup-kludge-integration?非常不清楚没有更多信息...
  • 抱歉不清楚.. 这里有更多细节: 1. 它只在内部(所以不能嵌入到外部网站上)。 2. 你可以把它想象成有点类似于堆栈溢出的投票赞成/反对票。 3. 我想确保它扩展到 500 个并发页面视图,每个页面包含 25 个项目,旁边显示一个“喜欢”计数。整体系统基于Python/Mysql/Memcache,

标签: python architecture


【解决方案1】:

只是一个疯狂的想法:为什么不直接使用 Facebook 的 like 按钮?然后,您不仅可以免费获得该功能,还可以通过 Facebook 墙上的帖子大量增加您网站的流量:“此人喜欢这个网站”。

【讨论】:

  • 这是一个网站内部使用,功能类似于facebook的like按钮,但不完全相同。
【解决方案2】:

一个在用户和项目之间进行多对多映射的关系表应该可以解决问题。

【讨论】:

    【解决方案3】:

    您实际上只需要 user_likes 表。 like_count 是从该表中计算出来的。如果您需要获得性能,您只需要存储它,但由于您使用的是 memcached,因此最好不要将聚合值存储在数据库中,而仅将其存储在 memcached 中。

    【讨论】:

    • 好点。我一直在考虑将喜欢计数存储在 memcache 中,但我想知道与在单个 SQL 语句中加载所有内容相比,它会对性能造成多大影响。对于具有 25 个“可爱”实体的页面,选项将是让 25 个内存缓存请求单个 sql 语句。
    • 当然你在MySQL中会有查询缓存,但是它的使用是有限的。 Memcache id 非常快,您将能够在执行单个小查询的时间内检索数十到数百个项目。
    • 谢谢!那讲得通。如果我用一些流行的“计数”来预热内存缓存,那么它应该能够做得很好。我想在数据库中存储喜欢的另一个原因是这样我就可以做“最喜欢”之类的事情。我仍然可以将喜欢计数存储在数据库中,但将其用于批处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2011-09-28
    • 1970-01-01
    • 2010-10-22
    • 2011-01-24
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多