Дизайн API: Как разбить на страницы и сохранить почтовый фид для пользователей? - PullRequest
0 голосов
/ 21 марта 2019

Представьте себе приложение, подобное Instagram, с бесконечной подачей.Фид заполняется на основе множества факторов, таких как друзья, подписанные аккаунты и т. Д.

Далее, давайте предположим, что есть таблица с именем Posts, которая содержит все сообщения , которыев настоящее время в Instagram.

И есть конечная точка GET /user/feed?page=1, которая возвращает разбитый на страницы массив постов, которые вошедший в систему пользователь увидит в своей ленте при открытии приложения.

Инаконец, в бэкэнде этого маршрута есть сложный алгоритм (X), который ранжирует тысячи сообщений, чтобы в итоге получить 100-500 массивов PostIds, которые увидит пользователь.Все круто, верно?

Поскольку конечная точка, GET /user/feed?page=1, разбита на страницы:

  1. Один из способов перебора - это перерасчет массива соответствующих сообщений итонко пропустите сообщения page * POSTS_PER_PAGE и вернитесь.Это уродливое решение, работающее по принципу albiet.

  2. Другой способ - создать хранилище Redis перед основной базой данных MySQL, которая кэширует канал (массив сообщений) длякаждый пользователь около 30 минут?(Я выбрал 30 минут, предполагая, что пользователь использует приложение прямо сейчас, и мы должны очень быстро возвращать результаты, пока он / она прокручивает. Как только они выходят из приложения и возвращаются после, скажем, 2 hours, он только делаетимеет смысл пересчитать PostIds и заново заполнить кеш. Если вы считаете, 30 minutes слишком резкий, предложите другой предел.)

Достаточно ли подходит второй метод или я его пропускаю?что-то?Любая обратная связь будет оценена.

...