巨大的时间线服务如何与数据库配合使用

时间:2015-03-24 06:57:21

标签: sql database twitter structure timeline

具有Twitter或Facebook等时间表的Web服务,它们如何处理这些庞大的数据?

例如,Twitter推文不是一个 - >一个而是一个 - >多个。 如果我考虑它的结构,就会是这样的。

  1. 汤姆推文"你好世界",系统插入新的记录,如 '"你好世界",fr:"汤姆"'

  2. Mike是汤姆的粉丝之一登录该服务,系统检查了他朋友的新推文,然后发现 '"你好世界",fr:"汤姆"'

  3. 这很简单,但我敢打赌它并不适用于拥有大量用户的服务,因为如果迈克跟随10,000人,系统必须继续执行10,000步骤,这需要很长时间。 (从推文中选择*,其中fm = [FRIENDS x 10,000])

    然后怎么样。

    1. 汤姆推特" hello world",系统检查Tom的粉丝列表,并插入新记录 '"你好世界",fr:" Tom",to:" Mike"' '"你好世界",fr:" Tom",to:" Nick"' '"你好世界",fr:" Tom",to:" Ken"' ...... x个粉丝数

    2. Mike登录,系统运行就像 (从推文中选择* =" Mike")

    3. 通过这种方式,迈克不会长时间等待系统响应,但如果汤姆拥有1,000,000名粉丝,那么系统必须在Tom的推文之后插入1,000,000条记录。汤姆可能会在前一个推文后5秒推文,然后推出另外1,000,000个记录。

      我对这个话题很感兴趣。 如果你知道他们是如何做到的,请教我,即使你不知道确切的方法,分享你的想法也会非常感激。

1 个答案:

答案 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)。