【问题标题】:Optimal MySQL design for user-specific activity feeds针对用户特定活动源的最佳 MySQL 设计
【发布时间】:2010-08-10 21:15:34
【问题描述】:

我正在构建一个网站,该网站同时构建站点范围和特定于用户的活动供稿。我希望您能看到下面的结构,并与您分享我的解决方案是否有效的见解。这很复杂,因为我有多种类型的用户现在没有存储在一个主表中。这是因为用户的类型非常不同,为用户元数据构建多个不同的表我认为太麻烦了。此外,还有多种类型的内容可以采取行动,以及多种类型的活动(关注、提交、评论等)。

构建站点范围的活动提要很简单,因为所有内容都记录到主提要表中,而我只是建立了一个列表。我在 MySQL 中有一个简单记录的主提要表:

  1. 活动类型;
  2. 目标实体的类型;
  3. 目标实体的ID;
  4. 源实体的类型(即用户或组织);
  5. 源实体的 ID。

(这只是一个大参考表,它将生成提要的脚本指向每个提要条目的适当表)。

在生成特定于用户的提要时,我试图找出某种方法将关系表与提要表连接起来,并使用它来解析结果。我有一个关系表,由“以下”关系组成,类似于提要表。虽然 b/c 只允许一种类型的用户关注其他内容类型/用户,但它更简单。

  1. 用户/源ID;
  2. 目标实体的类型;
  3. 目标实体的 ID。

提要和关注表中的第 2 列和第 3 列是相同的,我一直在尝试使用各种 JOIN 方法来匹配它们,然后通过用户拥有的关注表中的任何关系来限制它们。这不是很成功。

我使用的基本查询是:

 SELECT *
 FROM (`feed` as fe) LEFT OUTER JOIN `follow` as fo
                     ON `fe`.`feed_target_type` = `fo`.`follow_e_type`
                        AND fo.follow_e_id = fe.feed_target_id
 WHERE `fo`.`follow_u_id` = 1 OR fe.feed_e_id = 1
       AND fe.feed_e_type = 'user'
 ORDER BY `fe`.`feed_timestamp` desc LIMIT 10

此查询还尝试获取用户创建的任何内容(这些数据记录在提要表中),用户实际上默认遵循这些内容。

这个查询似乎有效,但我花了一些时间才找到它,我很确定我错过了一个更优雅的解决方案。有什么想法吗?

【问题讨论】:

    标签: php mysql android-activity feed


    【解决方案1】:

    我使用活动提要创建的第一个网站有一个通知表,其中记录了活动,然后从中提取朋友的操作。然而几个月后,这创下了数百万条记录。

    我现在正在编程的解决方案从单独的表中提取最新的“朋友”活动,然后按日期排序。查询在家里,如果有兴趣可以稍后发布示例?

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      相关资源
      最近更新 更多