Несколько попаданий в API, ставящие сервер на колени - PullRequest
0 голосов
/ 05 апреля 2011

Я использую API (давайте представим его facebook) для сбора данных между двумя указанными датами. Из-за ограничений API (как и большинства) я могу получать только очень много за раз, и поэтому мне приходится перелистывать результаты.

Вот мой вопрос / вопрос, хотя .. Лучше ли

  1. получите меньше результатов и сделайте больше звонков на API
  2. получить больше результатов назад и меньше звонков на API

Я использую 4 ГБ экземпляр облачного сервера ..

Данные, которые я просматриваю, представлены в формате XML и содержат около 20 тыс. Записей. Каждая запись содержит, вероятно, еще 20 тегов внутри. После полного извлечения данных размер составляет около 10 МБ. Моя проблема в том, что * , когда мой сервер работает с API, собирая эту информацию, процессор и память резко возрастают почти до 100%. Я пытался получить 500 за раз, 1000 за один раз, 5000 за один раз ... это то, где мне нужно собрать 20 за один раз ... или есть что-то еще, на что я должен смотреть?

Я не уверен, что еще предоставить, если есть что-то, что я могу предоставить, просто дайте мне знать

Обновления на основе ответов

  • У меня хост с Storm on Demand, который отлично работает для нас и, кажется, отличное оборудование - https://www.stormondemand.com/cloud-server/
  • Я использую HPricot для анализа XML (который, возможно, можно оптимизировать, я здесь не эксперт)
  • Мне нужны все данные, этот сервис не предлагает экспорт, только API.

РЕДАКТИРОВАТЬ [чтобы помочь людям споткнуться об этом позже] Я переключился с Hpricot на Nokogiri, НАМНОГО быстрее. Кроме того, я строил XML-файл в памяти, по-видимому, это было чрезвычайно интенсивно и занимало очень много времени. Я сократил эту операцию с 10 минут до чуть более 1 минуты, исправив эти две вещи.

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вопросы, которые вам нужно задать, это почему ваш CPU + память зашкаливает?4 ГБ достаточно для обработки этих данных, поэтому оптимизирован ли ваш код для решения этой задачи?Если нет, что вы можете сделать?

Достаточно ли оптимизирован ваш код?Справедливо.Теперь вы можете переписать их, используя расширения C.

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

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

1 голос
/ 05 апреля 2011

Вот список вещей, на которые стоит посмотреть:

  • оптимизируйте свой код.попробуйте профилировать ваш код и посмотрите, сможете ли вы его улучшить.Вероятно, использование лучшего парсера (DOM vs SAX) возможно.
  • получите лучшее оборудование / хостинг.4Гб это просто память.Скорее всего, вы находитесь на общем хостинге / vm и CPU ограничены
  • перегрузить некоторые тяжелые операции с ЦП / памятью для более быстрого обслуживания / приложения, такие как обработка XML, анализ данных, файл io можно выполнить в C / C ++
  • в надлежащей облачной среде вы должны иметь возможность порождать больше виртуальных машин и соответственно корректировать свои задания / нагрузку.Это будет стоить дороже и потребует какого-то менеджера по работе.
...