Каков наилучший способ для нумерации страниц на Mongodb с использованием Java - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать простую нумерацию страниц в mongodb по приведенному ниже коду.

collection.find().skip(n).limit(n);

но не похоже, что возникнет проблема с производительностью, если мы увидим, что в терминах java сначала find возвращает все записи, учитывая, что у меня есть 2 миллиона записей, затем передает его в метод пропуска, затем он будет передан ограничить метод. это означает, что каждый раз, когда этот запрос будет извлекать все записи базы данных или драйверы mongodb работают по-разному, что я пропустил?

1 Ответ

0 голосов
/ 10 мая 2018

Говоря о нумерации страниц в MongoDB, легко написать этот код:

collection.find().skip(pageSize*(pageNum-1)).limit(pageSize);

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

Основной причиной является команда skip(), которая неэффективна и не может получить большой выигрыш от индекса.


Ниже приведено еще одно решение для повышения производительности при разбивке на большие данные:

Типичный сценарий использования разбивки на страницы состоит в том, что существует таблица или список для отображения данных указанной страницы, а также кнопка «Предыдущая страница» *1017* & «Следующая страница» для загрузить данные предыдущей или следующей страницы.

Если вы получили '_id' последнего документа на текущей странице, вы можете использовать find() вместо skip(). Используйте _id> currentPage_LastDocument._id в качестве одного из критериев для поиска данных следующей страницы. Вот псевдокод:

//Page 1
collection.find().limit(pageSize);
//Get the _id of the last document in this page
last_id = ...

//Page 2
users = collection.find({'_id': {$gt: last_id}}).limit(pageSize);
//Update the last id with the _id of the last document in this page
last_id = ...

Это позволит избежать обхода больших данных MongoDB при использовании skip().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...