2015-03-24 3 views
2

Веб-службы, имеющие временные рамки, такие как твиттер или facebook, как они работают с этими огромными данными?Как огромные службы времени работают с базой данных?

Twitter например, твиты не одно-, а одно-> несколько. Если я думаю о его структуре, это будет так.

  1. Том твиты «привет мир», система вставить новую запись, как «привет мир", фр: „Томь“»

  2. Майк, который один из последователей Тома входа в службу , система проверить новые твиты своих друзей, а затем находит «„привет мир“, фр:„Том“»

Это очень просто, но я уверен, что не работает на услуги с огромным пользователей, потому что, если Майк следует за 10 000 человек, система должна продолжать делать g step # 2 10 000 раз, это занимает много времени. (выберите * из твитов, где fm = [ДРУЗЬЯ x 10000])

Тогда как насчет этого способа.

  1. Том твиты «привет мир», система проверяет список последователей Тома, и вставить новые записи «„привет мир“, FR:„Том“, в:„Майк“» «привет мир" , фр: «Томь», в: «Ника»» „„привет мир“, фр: „Томь“, в: „Кен““ ... х число последователей

  2. Майк логины, система работает как (выберите * из твитов, где до = "Майк")

Таким образом, Майк долго не будет ждать ответа системы, но если у Тома есть 1000 000 последователей, система должна вставить 1 000 000 записей сразу после твита Тома. Том мог прочесть 5 секунд после предыдущего, затем еще 1 000 000 записей.

Меня интересует эта тема. Если вы знаете, как они это делают, пожалуйста, научите меня, и даже если вы не знаете точно, поделиться своими идеями будет так благодарно.

ответ

1

Если вы установите его, как эти 3 таблицы:

user 
user_tweet 
user_friend 

Вы можете хранить пользователя в таблице пользователей, твиты в таблице user_tweet, и друг пользователя (которая, конечно, другого пользователя) можно сохранить в таблице user_friend (реляционная).

запроса, вам нужно будет, как:

select user_tweet.* from user_tweet 
join user on user_tweet.user_id = user.id 
where user.id = @currentLoggedOnUserId 

Это даст YO список всех твитов от пользователей, которые связаны с вошедшего в систему пользователя. Когда пользователи создают друзей, запись добавляется в таблицу user_friend (с идентификатором пользователя и идентификатором друга).