Какой лучший способ получения данных с удаленного сервера с помощью одновременных вызовов?

#concurrency #queue #bluebird

Вопрос:

Я работаю над извлечением данных, таких как продукты, заказы на платформах электронной коммерции, таких как BigCommerce, Shopify и т.д., И сохраняю их в наших собственных базах данных. Чтобы повысить скорость извлечения данных из их API, мы планируем использовать библиотеку Bluebird.

Ранее логика извлечения данных была похожа на извлечение одной страницы за раз. Поскольку мы планируем совершать одновременные вызовы, «n» количество страниц будет получено одновременно.

Например, Bicommerce позволяет нам совершать до 3 одновременных звонков одновременно. Таким образом, нам нужно совершать одновременные вызовы, чтобы мы не получали одну и ту же страницу более одного раза, и в случае, если запрос не удался, запрос на эту страницу будет отклонен.

Каков лучший способ реализовать это? Одна идея, которая приходит мне в голову, это,

Одно из возможных решений — сохранить индекс текущих запросов в базе данных и обновлять его по завершении API, чтобы мы знали, какие из них не увенчались успехом.

Есть ли лучший способ сделать это? Любые предложения/идеи по этому поводу будут высоко оценены.

Комментарии:

1. Это немного сложно сделать, когда вопрос полностью концептуальный, без кода. Вы правы в том, что где-то вам нужно отслеживать, какие запросы завершены (и, предположительно, их результаты), какие находятся в процессе, а какие еще не отправлены. Я не уверен, в чем вам действительно нужна помощь.

2. @jfriend00 Привет, вопрос в том, есть ли какие-либо лучшие решения этой проблемы, чем то, которое я предложил

3. Ну, нет никакой другой концепции, кроме того, что вы описываете, поскольку вы, очевидно, должны отслеживать то, что вы сделали, находитесь в процессе выполнения и все еще должны делать. Концептуально, больше ничего нет. Существует множество возможных реализаций, но вы, похоже, не спрашиваете о какой-либо подробной реализации, поскольку код не показан. Например, следует ли вам отслеживать это состояние в самой базе данных, а не только в структуре в памяти, зависит от ряда вещей, которые здесь не раскрываются.