«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Оптимизация крупномасштабного извлечения данных через API: лучшие практики и решение для отложенного сбора данных на PHP

Оптимизация крупномасштабного извлечения данных через API: лучшие практики и решение для отложенного сбора данных на PHP

Опубликовано 8 ноября 2024 г.
Просматривать:434

Optimizing Large-Scale API Data Retrieval: Best Practices and PHP Lazy Collection Solution

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

Ключевые моменты при получении больших данных через API

Позвольте мне поделиться некоторыми ключевыми соображениями по эффективному получению больших наборов данных через API:

  • Обработка нумерации страниц: API обычно доставляют данные на страницах. Чтобы получить все данные, вам необходимо управлять нумерацией страниц, выполняя несколько вызовов API, отслеживая при этом курсор или номер страницы. Расчет количества необходимых вызовов API и управление этим процессом необходимы для получения полного набора данных.
  • Управление памятью: при получении больших наборов данных загрузка всего в память одновременно может привести к перегрузке вашей системы. Крайне важно избегать одновременной загрузки всех результатов в память. Вместо этого обрабатывайте данные порциями, чтобы ваше приложение оставалось отзывчивым и не испытывало проблем с памятью.
  • Ограничение и регулирование скорости: многие API накладывают ограничения на скорость, например, ограничивая вас X запросами в секунду или Y запросами в минуту. Чтобы оставаться в этих пределах, необходимо реализовать гибкий механизм регулирования, который адаптируется к конкретным ограничениям API.
  • Параллельные запросы API: учитывая необходимость выполнения многочисленных вызовов API из-за пагинации, вы хотите получить данные как можно быстрее. Одна из стратегий заключается в параллельном выполнении нескольких вызовов API с соблюдением ограничений скорости. Это гарантирует, что ваши запросы будут быстрыми и соответствующими ограничениям API.
  • Эффективный сбор данных: несмотря на многочисленные запросы API с разбивкой на страницы, вам необходимо объединить результаты в одну коллекцию, эффективно обрабатывая их, чтобы избежать перегрузки памяти. Это обеспечивает плавную обработку данных при низком использовании ресурсов.
  • Оптимизированный анализ JSON: многие API возвращают данные в формате JSON. При работе с большими ответами важно быстро получать доступ к определенным разделам JSON и запрашивать их, гарантируя, что ненужные данные не будут загружены или обработаны.
  • Эффективная обработка исключений: API обычно вызывают исключения посредством кодов состояния HTTP, указывая на такие проблемы, как тайм-ауты, несанкционированный доступ или ошибки сервера. Важно обрабатывать их, используя механизм исключений, предусмотренный вашим языком программирования. Помимо базовой обработки ошибок, вам также следует отображать и вызывать исключения таким образом, чтобы это соответствовало логике вашего приложения, делая процесс обработки ошибок понятным и управляемым. Внедрение повторных попыток, журналирование и сопоставление ошибок с значимыми исключениями обеспечивает плавный и надежный процесс получения данных.

PHP-решение «Ленивые страницы JSON»

Если вы работаете с PHP, вам повезло. Пакет с открытым исходным кодом Lazy JSON Pages предлагает удобный, независимый от платформы парсер API, который может загружать элементы из API-интерфейсов JSON с разбивкой на страницы в ленивую коллекцию Laravel с помощью асинхронных HTTP-запросов. Этот пакет упрощает нумерацию страниц, регулирование, параллельные запросы и управление памятью, обеспечивая эффективность и производительность.

Дополнительную информацию о пакете и дополнительные возможности его настройки можно найти в файле readme официального репозитория GitHub: Lazy JSON Pages.

Я хочу сказать спасибо Андреа Марко Сартори, автору пакета.

Пример: получение тысяч историй из Storyblok

Вот краткий пример получения тысяч историй из Storyblok с использованием пакета Lazy JSON Pages на PHP.
Сначала вы можете создать новый каталог, перейти в него и начать установку пакета:

mkdir lazy-http
cd lazy-http
composer require cerbero/lazy-json-pages

После установки пакета вы можете приступить к созданию скрипта:

totalItems('total')
    ->async(requests: 3)
    ->throttle(requests: 10, perSeconds: 1)
    ->collect('stories.*');

foreach ($lazyCollection as $item) {
    echo $item["name"] . PHP_EOL;
}

Затем вы можете заменить свой токен доступа и выполнить скрипт с помощью команды php.

Как это работает

  • Эффективное разбиение на страницы: результаты API разбиты на страницы, а ленивая коллекция обрабатывает выборку всех страниц без необходимости хранить все в памяти.
  • Асинхронные вызовы API: строка ->async(requests: 3) запускает три запроса API параллельно, повышая производительность.
  • Регулирование: строка ->throttle(requests: 10, perSeconds: 1) гарантирует, что в секунду выполняется не более 10 запросов с соблюдением ограничений скорости.
  • Эффективность использования памяти: использование отложенных коллекций позволяет обрабатывать данные поэлементно, сокращая нагрузку на память даже при работе с большими наборами данных.

Этот подход предлагает надежное, производительное и эффективное с точки зрения использования памяти решение для получения больших объемов данных из API-интерфейсов PHP.

Ссылки

  • Пакет Lazy JSON Pages: https://github.com/cerbero90/lazy-json-pages
  • Автор пакета с открытым кодом: https://github.com/cerbero90
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/robertobutti/optimizing-large-scale-api-data-retrieval-best-practices-and-php-lazy-collection-solution-1lc1?1 При наличии каких-либо нарушений , пожалуйста, свяжитесь с Study_golang @163.comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3