все сообщения, выделить из них те, которые отправлены пользователями, на которых ты подписан, а потом сортировать по дате отправки сообщения. Но ведь проходиться по всей базе с сообщениями - это наверное плохо?
Ну, у вас есть иные варианты как реализовать подобный функционал эффективно?)
Я не знаю, как делают в хайлоад проектах, поэтому и спрашиваю. Вряд ли вк для того чтобы отобразить фид делают селект по всей базе с сообщениями
на хайлоад проектах есть хайлоад. Не стоит пытаться на старте родить гугл. Любой проект эволюционирует в процессе роста.
1) Достаточно просканировать сообщения, которые отправлены пользователями из списка друзей. 2) И их можно взять небольшое количество от каждого в порядке времени, а потом выдавать самое младшэе из всех. Как только у кого-то закончатся полученные -- взять у него ещё небольшое количество. Это позволит небольшыми обращениями к базе выдавать отсортированные сообщения. 3) Но, всё-таки, пытаться таким способом выдать все сообщения от десятков тысяч друзей за всё время -- можэт быть накладно. Особенно когда пользователь базы сильно не один. Потому обычно "ленту друзей" ограничивают в размерах. В ЖЖ, например, тремя сотнями сообщений.
По первому пункту вопрос - как можно просканировать только сообщения из списка друзей? В больших проектах таблица сообщений может занимать десятки миллиардов. Как в такой большой выборке найти только сообщения друзей без скана по всей таблице с сообщениями?
SELECT <> FROM friend_of INNER JOIN messages ON messages.user_id = friend_of.friend_id WHERE friend_of.user_id = <user_id> И это самые азы, прорешайте задачи какого-нибудь учебника по SQL, быстрее будет, чем пытаться догадаться до всего поиском по stackoverotfl.
Как писать запросы я знаю. Но ведь движок БД все равно проходится по всей таблице сообщений, нет? Иначе не понимаю математику этого процесса
Не обязательно. Чтобы проходить не по всем сообщениям существуют индэксы.
Обычно по ТЗ строят. Берут ТЗ и по нему строят схему БД
Обсуждают сегодня