Как реализованы такие приложения, как Twitter?
Вопрос
Предположим, что 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; заключается в денормализации данных (предварительный расчет и ведение таблиц соединений вместо выполнения объединений на лету) или вообще не используют базу данных . < - Обязательно прочтите это!