Как реализованы такие приложения, как Twitter?

StackOverflow https://stackoverflow.com/questions/1415147

  •  06-07-2019
  •  | 
  •  

Вопрос

Предположим, что A следует за 100 людьми,

тогда понадобится 100 операторов соединения,

Я думаю, что это ужасно для базы данных.

Или есть другие способы?

Это было полезно?

Решение

Зачем вам нужно 100 объединений?

У вас будет простая таблица «Подписки» с вашим идентификатором и идентификатором другого человека...

Затем вы получаете «Твиты», присоединившись примерно так:

Select top 100 
    tweet.* 
from 
    tweet 
inner join 
    followers on follower.id = tweet.AuthorID 
where 
    followers.masterID = yourID

Теперь вам просто нужно достойное кеширование и убедитесь, что вы используете неблокирующий запрос и у вас есть вся информация...(Ну, возможно, добавим в смесь немного пользовательских данных)

Редактировать:

твитнуть

ID - tweetid
AuthorID - ID of the poster

Последователи

MasterID - (Basically your ID)
FollowerID - (ID of the person following you)

А Followers таблица имеет составной идентификатор, основанный на главном и followerIDУ него должно быть 2 индекса — один по «masterID — FollowerID» и один по «FollowerID и MasterID».

Другие советы

Реальная хитрость заключается в том, чтобы минимизировать использование вашей базы данных (например, кеш, кеш, кеш) и понять схемы использования. В конкретном случае с Твиттером они используют кучу различных приемов, таких как организация очередей, безумное количество кеширования в памяти и некоторые действительно умные оптимизации потоков данных. Дайте Масштабирование Twitter: ускорение работы Twitter на 10000 процентов и другие связанные статьи читать. Ваш вопрос о том, как вы реализуете & Quot; после & Quot; заключается в денормализации данных (предварительный расчет и ведение таблиц соединений вместо выполнения объединений на лету) или вообще не используют базу данных . < - Обязательно прочтите это!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top