创建类似于Facebook的帖子Feed

时间:2017-11-01 09:49:43

标签: php mysql feeds

我想创建类似于Facebook的帖子提要不完全但与此类似。 所有帖子都显示在用户时间线上,由他/她的朋友发布。

有三个表 1 - 用户 2 - 朋友 3 - 帖子

用户表

user_id         name            email
--------------------------------------
u123            Abc             abc@m.com
u234            Def             def@m.com
u768            Asd             asd@m.com
 .               .                  .
 .               .                  .
 .               .                  .

朋友表

id      user_id         friend_id
----------------------------------
1       u123            u234
2       u123            u768
3       u234            u786
4       u234            u123
.        .               .
.        .               .
.        .               .

帖子表

post_id         user_id         content
---------------------------------------------
p123            u234            some content
p124            u234            some content
p125            u123            some content
p126            u786            some content
 .               .                  .
 .               .                  .
 .               .                  .

我脑子里有两种算法。

第一

假设我需要获得user_id = u123

的帖子
  1. 朋友表中获取friends_id例如如果您使用MySQL
         SELECT friend_id FROM friends_tbl WHERE user_id = u123;
  2. 帖子表格中获取帖子 例如
    SELECT content FROM posts WHERE user_id IN (friends_id_list);
  3. 但是这个Algo假设u123 100 朋友的问题。但只有两个朋友添加了帖子(例如u234和u786)。然后friends_id_list中的所有其他 98好友都没用,也没有必要在那里。有98个朋友ID也使查询变慢。这是第二个算法来了。

    第二

    创建另一个表feeds,其中包含有关上传帖子的信息。

    供稿表

    id      friend_id       post_id
    --------------------------------
    1       u123            p123
    2       u786            p123
    3       u123            p124
    4       u786            p124
    5       u123            p126
    .        .               .
    .        .               .
    .        .               .
    
    1. 上传帖子,例如u234上传帖子
    2. 获取u234的所有朋友,例如 u123和u786
    3. friends_ids表格中插入posts_idsfeeds 在示例u234上传两个帖子p123和p124所以这些帖子id插入了
      feeds表中以及u234朋友ID,如表中所示。
    4. 假设获得用户的帖子Feed = u123
    5. feeds获取帖子ID,其中用户ID = u123只返回 p123,p124和p126
    6. posts获取帖子,其中的帖子ID为p123,p124,p126
    7. 通过使用这个Algo,我们知道我们想要哪些帖子。看到没有一个额外的密钥。

      但是在所有情况下这都不好假设用户u234如果用户有100个朋友 只发布一个帖子,它需要在feeds表中插入100个条目以通知所有100个朋友。在这种情况下这不好。

      这些算法,任何建议之间一定有什么关系吗?

      更新11/2/2017

      如果你仔细看。

      Algo1 适用于插入 posts但不适合选择正如您在示例98中所见,额外选择操作需要生成feeds

      Algo2 适用于选择 posts插入时效果不佳正如您在示例100中看到的那样,额外的插入需要生成feeds

      使用 Algo2 可以弥补 Algo1 的不足之处 Algo 可以涵盖 Algo 但这些都是两个不同的事情我的问题是我们如何在它们之间实现两者兼有?

0 个答案:

没有答案