Как morphia пропускает новые записи, поступающие во время нумерации страниц?

Я много читал об использовании пропуска с подкачкой (и связанных с этим проблем с производительностью). Для моего приложения проблемы с производительностью не являются проблемой, однако мне не ясно, что происходит с пропуском, если между запрашивающими страницами появляются новые записи.

Например, скажем, у меня есть 10 записей, пользователь запрашивает страницу 5, и мы доставляем их. Когда пользователь просматривает первую страницу, в базу данных вставляются еще 5 записей, пользователь запрашивает следующую страницу из 5. Предполагая, что мы сортируем по идентификатору или дате, пользователю теперь будут возвращены те же 5 записей (потому что, для второй страницы пропустить пропустить первые 5 вновь добавленных записей и вернуть следующие 5, которые теперь являются теми же записями, которые были первоначально возвращены)?

1 ответ

Решение

Ты прав. Производительность и корректность с добавленными / удаленными записями является проблемой.

Для хорошего объяснения см. http://use-the-index-luke.com/no-offset (Маркус Винанд много лет боролся со смещением;-)). Насколько я знаю, нумерация клавиш не поддерживается ни в MongoDB, ни в Morphia, так что вам придется создавать ее самостоятельно. Убедитесь, что вы всегда работаете с чем-то уникальным (например, дата и идентификатор).

Другие системы реализовали эту функцию изначально, например, в Elasticsearch с поиском после.

Другие вопросы по тегам