Как реализованы такие приложения, как твиттер? - PullRequest
3 голосов
/ 12 сентября 2009

Предположим, А следует за 100 человек,

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

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

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

Ответы [ 2 ]

6 голосов
/ 12 сентября 2009

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

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

Затем вы получаете «твиты», присоединяясь к чему-то вроде этого:

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

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

Edit:

твит

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»

1 голос
/ 12 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...