Я хочу создавать пост-каналы, похожие на Facebook, но не похожие на это.
Все сообщения отображаются на временной шкале пользователя, которую публикуют его друзья.
Есть три таблицы 1- пользователи 2- друзья 3- сообщений
Таблица пользователей
user_id name email
--------------------------------------
u123 Abc abc@m.com
u234 Def def@m.com
u768 Asd asd@m.com
. . .
. . .
. . .
Стол друзей
id user_id friend_id
----------------------------------
1 u123 u234
2 u123 u768
3 u234 u786
4 u234 u123
. . .
. . .
. . .
Таблица сообщений
post_id user_id content
---------------------------------------------
p123 u234 some content
p124 u234 some content
p125 u123 some content
p126 u786 some content
. . .
. . .
. . .
У меня в голове два алгоритма.
Первый
Предположим, мне нужно получить почтовые каналы user_id = u123
friends_id
от друзья Таблица.MySQL
SELECT friend_id FROM friends_tbl WHERE user_id = u123;
SELECT content FROM posts WHERE user_id IN (friends_id_list);
Но вот некоторые проблемы в этом Алго Предположим, u123
иметь 100 друзья. Но только два друга добавили сообщения (например, u234 и u786). Тогда все остальные 98 друзей в friends_id_list
бесполезен и нет необходимости быть там. Там 98 друзей id также делают запрос медленным. Вот второй алгоритм.
второй
Создать другую таблицу feeds
которые содержат информацию о том, как загрузить пост.
Таблица кормлений
id friend_id post_id
--------------------------------
1 u123 p123
2 u786 p123
3 u123 p124
4 u786 p124
5 u123 p126
. . .
. . .
. . .
u234
загрузить сообщениеu234
например U123 и U786friends_ids
вместе с posts_ids
в feeds
Таблицаfeeds
Таблица вместе с идентификатором друзей U234, как вы можете видеть в таблице.feeds
где user id = u123 это только возврат p123, p124 и p126posts
где сообщения идентификаторы в p123, p124, p126Используя этот алгоритм, мы знаем, какие сообщения мы хотим видеть, что нет ни одного дополнительного ключа.
Но это не хорошо во всех случаях. Предположим, если пользователь u234
имеет 100 друзей, если пользователь
посты только один пост нужно вставить 100 записей в feeds
таблица для уведомления всех 100 друзей. Это не хорошо в этом случае.
Должно быть что-то между этими алгоритмами, любое предложение?
Обновление 02.11.2017
Если вы видите внимательно.
Algo1 хорошо для вставка posts
Но не хорошо с выбор Как видно из примера 98, дополнительная операция выбора требует генерации feeds
,
Algo2 хорошо для выбор posts
Но не хорошо когда вставка Как вы можете видеть в примере 100 дополнительных вставок требуется для генерации feeds
Algo1 недостатки могут быть покрыты с помощью Algo2 а также Algo2 недостатки могут быть покрыты Algo Но это две разные вещи. Мой вопрос: как мы можем реализовать оба или что-то между ними?
Задача ещё не решена.
Других решений пока нет …