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