具有Twitter或Facebook等时间表的Web服务,它们如何处理这些庞大的数据?
例如,Twitter推文不是一个 - >一个而是一个 - >多个。 如果我考虑它的结构,就会是这样的。汤姆推文"你好世界",系统插入新的记录,如 '"你好世界",fr:"汤姆"'
Mike是汤姆的粉丝之一登录该服务,系统检查了他朋友的新推文,然后发现 '"你好世界",fr:"汤姆"'
这很简单,但我敢打赌它并不适用于拥有大量用户的服务,因为如果迈克跟随10,000人,系统必须继续执行10,000步骤,这需要很长时间。 (从推文中选择*,其中fm = [FRIENDS x 10,000])
然后怎么样。
汤姆推特" hello world",系统检查Tom的粉丝列表,并插入新记录 '"你好世界",fr:" Tom",to:" Mike"' '"你好世界",fr:" Tom",to:" Nick"' '"你好世界",fr:" Tom",to:" Ken"' ...... x个粉丝数
Mike登录,系统运行就像 (从推文中选择* =" Mike")
通过这种方式,迈克不会长时间等待系统响应,但如果汤姆拥有1,000,000名粉丝,那么系统必须在Tom的推文之后插入1,000,000条记录。汤姆可能会在前一个推文后5秒推文,然后推出另外1,000,000个记录。
我对这个话题很感兴趣。 如果你知道他们是如何做到的,请教我,即使你不知道确切的方法,分享你的想法也会非常感激。
答案 0 :(得分:1)
如果您将其设置为这3个表:
user
user_tweet
user_friend
您可以将用户存储在user表中,user_tweet表中的推文和用户的朋友(当然是另一个用户)可以存储在user_friend(关系)表中。
您需要的查询如下:
select user_tweet.* from user_tweet
join user on user_tweet.user_id = user.id
where user.id = @currentLoggedOnUserId
这将为用户提供与登录用户相关的所有推文的列表。当用户结交朋友时,会将记录添加到user_friend表中(使用用户ID和朋友ID)。