давайте предположим, что у нас есть огромная коллекция mongodb (около 60 000 000 записей), и мы хотим прокрутить ее, не извлекая, конечно, огромное количество памяти. Для Hibernate orm это возможно, так как есть прокрутка запросов API и критериев, но что может быть решением для разбиения на страницы в OGM (уже потратил много времени, но я ничего не мог найти)? Я индексирую объекты партиями по 50 000, используя API setFirstResult-setMaxResult. Это время в секундах для получения пакетов из запроса, например
em.createNativeQuery(query, Entity.class).setFirstResult(i).setMaxResults(batchSize).getResultList()
results.stream().forEach(res -> fullTextEntityManager.index(res));
увеличивая i на каждой итерации с помощью i+=batchSize;
Я уже пытался использовать OgmMassIndexer, но мне нужно иметь возможность запускать и останавливать, индексировать определенные диапазоны, поэтому я предпочитаю делать это вручную.
Как очевидно и логично, время на поиск первого результата в каждой итерации увеличивается. Здесь у меня есть время в секундах, чтобы найти следующую партию 50000 с начала из 4 миллионов (setFirstResult(4000000).setMaxResult(50000)):
например. чтобы перейти к 4000000, потребовалось 17 секунд и т. д., чтобы перейти к 4050000, потребовалось 15 секунд и т. д., чтобы перейти к 4100000, потребовалось 12 секунд и т. д., но позже это число значительно увеличивается:
Найдено: 17 Найдено: 15 Найдено: 12 Найдено: 13 Найдено: 13 Найдено: 13 Найдено: 15 Найдено: 16 Найдено: 16 Найдено: 17 Найдено: 18 Найдено: 18 Найдено: 19 Найдено: 19 Найдено: 20 Найдено: 20 Найдено: 21 Найдено: 21 Найдено: 22 Найдено: 21 Найдено: 22 Найдено: 23 Найдено: 23 Найдено: 23 Найдено: 24 Найдено: 24 Найдено: 25 Найдено: 25 Найдено: 26 Найдено: 26 Найдено: 27 Найдено: 28 Найдено: 27 Найдено : 29 Найдено: 29 Найдено: 30 Найдено: 31 Найдено: 32 Найдено: 33 Найдено: 30 Найдено: 33 Найдено: 32 Найдено: 34 Найдено: 34 Найдено: 35 Найдено: 35 Найдено: 38 Найдено: 36 Найдено: 38 Найдено: 36 Найдено: 41 Найдено: 41 Найдено: 39 Найдено: 41 Найдено: 41 Найдено: 40 Найдено: 42 Найдено: 43 Найдено: 42 Найдено: 44 Найдено: 44 Найдено: 45 Найдено: 47 Найдено: 45 Найдено: 44 Найдено: 44 Найдено: 47 Найдено: 44 Найдено: 47 Найдено: 47 Найдено: 50 Найдено: 52 Найдено: 93
Любые варианты прокрутки mongodb с помощью курсора ogm или чего-то еще для извлечения объектов в сеансе и их эффективного индексирования? Я имею в виду, что это нецелесообразно даже для приложения, которое хочет разбить такой большой объем данных на страницы с помощью OGM без Hibernate Search, поэтому я полагаю, что есть решение, которого я не вижу.
Большое спасибо.
Hibernate OGM 5.3.1, Hibernate Search 5.9.0 с использованием ElasticSearch