Допустим, вы создаете сайт наподобие reddit, и вы хотите, чтобы посты были бесконечно прокручиваться (по 25, и еще 25 загружались при достижении дна)
Наивное решение использует LIMIT AND OFFSET
, но они не совсем желательны из-за соображений производительности, а также потому, что если новое сообщение будет добавлено на страницу, пока вы на ней, при переходе на следующую страницу будет дубликат.
Поэтому вместо решений рекомендуется использовать предложение WHERE
, а затем сортировать по некоторому дискретному, уникальному значению. При загрузке большего количества страниц вы передаете текущее значение, а затем база данных знает, куда идти.
Я бы использовал это, за исключением того, что в моей ситуации эти значения не являются уникальными. Например, один из вариантов сортировки сообщений включает неуникальные значения. Таким образом, первое решение не сработает, потому что оно может содержать дубликаты.
Одна из идей, которые у меня были, - просто вернуть 1000 или около того идентификатора публикации при начальной загрузке страницы. Затем клиент отправит первые 25 идентификаторов сообщений на сервер, чтобы получить их. Если они прокрутят вниз, то отправят следующие 25, чтобы получить данные о них и т. Д.
Единственная проблема в том, что это также не совсем эффективно. Если пользователь вообще не прокручивает, отправлять эти 1000 почтовых идентификаторов было напрасно.
Есть ли правильное решение для этого? Как эффективно обрабатывать нумерацию страниц, которая устраняет дубликаты, когда опция сортировки включает неуникальные значения?