【问题标题】:Implementing a "Follow" user feature using PHP and Mysql使用 PHP 和 Mysql 实现“关注”用户功能
【发布时间】:2013-04-20 11:54:24
【问题描述】:

问题:我正在开发一种有卖家和买家的电子商务平台。现在在我的情况下,卖家也可以是买家,即每个用户都可以买卖。
所以我有一个名为 users 的表。现在我想实现一个关注供应商/用户功能,其中用户可以点击 follow 并且他会看到该列表列出的所有商品供应商在他的帐户下(直到他取消关注)。

现在我的传统方法是有一个有一个键和两列的表来存储 follower 和 follow 例如: |id | userId| vendorId
所以它会随着用户继续关注其他人而水平移动。但是如果我有一个用户关注很多人(比如 100),我的查询可能需要很长时间才能选择一个每个用户 100 条记录。

问题:如何实现follow机制?还有比这更好的方法吗?我用的是PHP和Mysql。

Reasearch:我尝试了解 facebook 和 Pinterest 是如何处理它的,但这对于我现在学习来说似乎有点太大了,因为我不希望立即有那么多用户。我是否需要使用 memcache 来提高性能并避免重复查询?我可以在任何意义上使用与 Mysql 并行的文档数据库吗?

我想要一个简单但功能强大的实现,如果我的用户群逐渐增长到几千,它可以扩展。

任何帮助或见解都会非常有帮助。

【问题讨论】:

  • 您是否想过使用逗号分隔的值来存储供应商名称,例如 id|用户名| vendorId1、vendorId2、vendorId3 等
  • @Sid 这到底会如何提高性能?
  • @user1615903 保存带有供应商名称的字符串的单个列可能会提高性能。例如,您不会将数据放在不同的页面中,而是放在一个地方。但这会使控制数据完整性变得更加困难,并且可能会降低性能。这将使搜索观察供应商的用户几乎是不可能的。可能这不值得所有的麻烦,但它可能会起作用。

标签: php mysql web-applications memcached


【解决方案1】:

因为,根据我对这个场景的理解,一个用户可能会关注很多供应商,而一个供应商可能有很多关注者,这构成了多多关系,因此在数据库模式中实现这一点的唯一规范化方法应该完全按照您的描述使用链接表。

至于性能考虑,我不会太担心,因为它可以在 userId 和 vendorId 上建立索引,查询应该没问题。

【讨论】:

  • 感谢您的输入。是的,这是多对多的关系,我打算采用相同的方法,但我想知道 Pinterest、twitter 等网站如何处理它。也许我需要稍后。 :P 任何其他智能算法或方法来实现它?
  • 简单就是聪明 ;) 对于您所描述的,这是最简单的解决方案。 Jakub 关于聚集索引的建议也绝对值得考虑,但除此之外,我不想过多地考虑这个问题
【解决方案2】:

联结表可能是最好的方法,但仍然很大程度上取决于您的clustered index

  • 使用替代键 id 上的键聚集的表可以加快添加新记录的速度。

  • 使用键 (userId,vendorId) 聚类的表将使您在查找供应商的位置查询某个用户会更快

  • 使用键 (vendorId,userId) 聚集的表将使您在其中查找关注某个供应商的用户的查询速度更快

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2019-09-04
    • 2012-11-11
    相关资源
    最近更新 更多