У меня есть метод, который выполняет постраничный вызов базы данных для сбора данных и возврата наблюдаемой.
public Observable search(string query, int limit, int offset)
Я хочу создать метод, который выполняет все постраничные поисковые запросы, чтобы загрузить все страницы для моего запросить и вернуть Completable. В этом методе я хотел бы объединить все страницы в одном потоке, выполнить реактивные преобразования и действия и вернуть завершаемый.
Однако, поскольку мне приходится иметь дело с огромным количеством данных, я не хочу загружать на всех страницах одновременно, поместите огромное количество данных в память и залейте мой реактивный поток большим количеством данных, потому что мой подписчик обрабатывает данные медленнее, чем издатель.
Итак, я хотел бы обработать первую страницу данных, затем загрузите другую страницу с помощью метода поиска, обработайте ее и продолжайте, пока я не обработаю последнюю страницу.
Поскольку я нахожусь в реактивном потоке, я не уверен, что было бы неплохо написать al oop для: выборки данных, подписки на поток, который будет преобразовывать и обрабатывать данные.
Мой подход заключается в объединении всех страниц в одном потоке (с использованием метода, такого как Observable.concat), а затем в обработке потока. Однако я не хочу загружать огромное количество данных в память и получать исключение outOfMemoryException.
Должен ли я использовать Flowable и использовать противодавление в такой ситуации?
Каков наилучший способ сделать это с rxjava2?