我想创建类似于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
friends_id
。
例如如果您使用MySQL
SELECT friend_id FROM friends_tbl WHERE user_id = u123;
SELECT content FROM posts WHERE user_id IN (friends_id_list);
但是这个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
. . .
. . .
. . .
u234
上传帖子u234
的所有朋友,例如 u123和u786 friends_ids
表格中插入posts_ids
和feeds
在示例u234上传两个帖子p123和p124所以这些帖子id插入了feeds
表中以及u234朋友ID,如表中所示。feeds
获取帖子ID,其中用户ID = u123只返回 p123,p124和p126 posts
获取帖子,其中的帖子ID为p123,p124,p126 通过使用这个Algo,我们知道我们想要哪些帖子。看到没有一个额外的密钥。
但是在所有情况下这都不好假设用户u234
如果用户有100个朋友
只发布一个帖子,它需要在feeds
表中插入100个条目以通知所有100个朋友。在这种情况下这不好。
这些算法,任何建议之间一定有什么关系吗?
更新11/2/2017
如果你仔细看。
Algo1 适用于插入 posts
但不适合选择正如您在示例98中所见,额外选择操作需要生成feeds
。
posts
但插入时效果不佳正如您在示例100中看到的那样,额外的插入需要生成feeds
使用 Algo2 可以弥补 Algo1 的不足之处 Algo 可以涵盖 Algo 但这些都是两个不同的事情我的问题是我们如何在它们之间实现两者兼有?