Я вижу getAll()
в вашем коде. Это заставляет все данные быть переданными стороне вызывающего абонента. Это именно то, чего вы хотели избежать.
Iterator
позволяет избежать этой проблемы, поскольку данные загружаются в пакеты по требованию. Таким образом, вам не нужно загружать все в память одного узла, когда вы запускаете запрос. Размер страницы можно настроить, установив свойство ScanQuery # pageSize . По умолчанию он равен 1024. Итератор можно получить, вызвав метод QueryCursor.iterator()
. Поэтому вместо сохранения смещения вам нужно сохранить итератор.
SQL SELECT запрос с указанием LIMIT и OFFSET также является опцией. Но в случае, если у вас более одного узла, записи LIMIT + OFFSET будут загружены с каждого узла в редуктор во время выполнения. Вы должны принять это во внимание.