针对用户特定活动源的最佳MySQL设计

时间:2010-08-10 21:15:35

标签: php mysql android-activity feeds

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

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

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

(这只是一个很大的参考表,它指向生成每个Feed条目的相应表格的Feed的脚本。)

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

  1. user / source id;
  2. 目标实体的类型;
  3. 目标实体的ID。

第2栏和第2栏feed和follow表中的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

此查询还会尝试抓取用户在其中创建的任何内容(在Feed表中记录了哪些数据),默认情况下,该内容实际上是跟随的。

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

1 个答案:

答案 0 :(得分:0)

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

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