Создать пост-канал похож на Facebook

Я хочу создавать пост-каналы, похожие на 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

  1. Получить friends_id от друзья Таблица.
    Например Если вы используете MySQL
    SELECT friend_id FROM friends_tbl WHERE user_id = u123;
  2. Получать сообщения от сообщений Таблица
    Например
    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
.        .               .
.        .               .
.        .               .
  1. Загрузить сообщение, например u234 загрузить сообщение
  2. Получить всех всех друзей u234 например U123 и U786
  3. Вставить friends_ids вместе с posts_ids в feeds Таблица
    В примере u234 загрузите два сообщения p123 и p124.
    в feeds Таблица вместе с идентификатором друзей U234, как вы можете видеть в таблице.
  4. Предположим, вы получаете пост-фиды пользователя = u123
  5. Получить идентификатор сообщения от feeds где user id = u123 это только возврат p123, p124 и p126
  6. Получать сообщения от posts где сообщения идентификаторы в p123, p124, p126

Используя этот алгоритм, мы знаем, какие сообщения мы хотим видеть, что нет ни одного дополнительного ключа.

Но это не хорошо во всех случаях. Предположим, если пользователь u234 имеет 100 друзей, если пользователь
посты только один пост нужно вставить 100 записей в feeds таблица для уведомления всех 100 друзей. Это не хорошо в этом случае.

Должно быть что-то между этими алгоритмами, любое предложение?

Обновление 02.11.2017

Если вы видите внимательно.

Algo1 хорошо для вставка posts Но не хорошо с выбор Как видно из примера 98, дополнительная операция выбора требует генерации feeds,

Algo2 хорошо для выбор posts Но не хорошо когда вставка Как вы можете видеть в примере 100 дополнительных вставок требуется для генерации feeds

Algo1 недостатки могут быть покрыты с помощью Algo2 а также Algo2 недостатки могут быть покрыты Algo Но это две разные вещи. Мой вопрос: как мы можем реализовать оба или что-то между ними?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector