答案是他们没有在好友表上进行选择,他们很可能使用非标准化的新闻事件表。我们在DoInk.com上实现了类似于Facebook的新闻源,这是我们的处理方式:
这里有一个“
NewsEvent”的概念,它具有一个类型,一个启动器(一个用户ID)和一个目标用户(也是一个用户ID)。(您也可以为与该事件相关的其他属性添加其他列,或将其加入)
当用户在其他用户的墙上张贴内容时,我们将生成如下事件:
INSERT INTO events VALUES (wall_post_event, user1, user1)
查看用户1的配置文件时,您将为所有事件选择用户1是启动者还是目标的事件。这就是显示个人资料供稿的方式。(根据您的隐私模型,您可能会很喜欢并过滤掉事件。出于性能原因,您可以考虑在内存中这样做)
例:
SELECt * FROM events WHERe initiator = user1 or target = user1 //to see their profile feedSELECt * FROM events WHERe initiator IN (your set of friend ids) //to see your newsfeed
当您想查看与您的朋友有关的所有事件的新闻源时,可以查询以选择发起者在您的朋友集中的所有事件。
避免使用子选择的实现,具体取决于复杂性,它们不会扩展。



