Разработка базы данных ленты новостей как в Facebook - PullRequest
10 голосов
/ 21 ноября 2008

Как сделать новостную ленту «дружественной» для создания базы данных, чтобы не было очень дорого, чтобы все элементы (запросы) помещались в новостную ленту? Единственный способ, о котором я могу подумать, - это объединить почти все таблицы (представляющие группы, заметки, друзей и т. Д.) И получить даты и т. Д., Просто кажется, что запрос для каждого пользователя будет очень дорогим, Было бы довольно сложно кешировать что-то подобное, когда все разные.

Ответы [ 3 ]

12 голосов
/ 21 ноября 2008

Во-первых, подумайте над созданием прототипа производительности, чтобы проверить, что объединение будет слишком дорогим. Возможно, вы преждевременно оптимизируете что-то, что не является проблемой.

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

например. при создании записи заметки также создайте запись события в таблице событий с указанием даты, описания и пользователя.

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

Это не нормализованная схема, но она может быть быстрее, если получение ленты событий является частой операцией.

2 голосов
/ 11 декабря 2008

UNION = дорого, потому что полный набор результатов подвергается операции DISTINCT. UNION ALL = дешевле, потому что фактически это несколько запросов, результаты каждого из которых добавляются вместе.

Это зависит от объема данных или курса.

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

2 голосов
/ 08 декабря 2008

Трудно ответить на этот вопрос без схемы, но я догадываюсь, что UNION, включающий 10 или более правильно проиндексированных таблиц, ничто:
Типичное приложение LAMP, такое как WordPress или PHPBB, без проблем выполняет более 10 запросов на просмотр страницы. Так что не волнуйся.

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