2013-03-07 2 views
1

У меня есть довольно прямой вопрос, я собираюсь сделать много запросов HTTP для получения полезной нагрузки XML, и мне нужно проанализировать полезную нагрузку и внести некоторые изменения в базы данных.Самый эффективный способ справиться с большим количеством HttpRequests

Я собираюсь делать эти запросы довольно часто, поэтому любая оптимизация будет хорошей.

Мне интересно, есть ли более эффективный способ выполнения запросов, так как это займет больше времени. Я пишу это на Java, я использую SAXParser для анализа полезной нагрузки XML для данных, которые мне нужны. Я использую класс HttpURLConnection для запросов Http, и я просто запускаю поток, синхронизированный и ожидающий каждого запроса. Я пытался одновременно запускать запросы, и я сталкиваюсь с некоторыми проблемами. Компьютер, на котором я буду работать, очень способен, поэтому я не буду сталкиваться с проблемами памяти или обработки. Так что я задаю следующие вопросы:

  1. Было бы более эффективным взять хэш полезной нагрузки XML и сохранить его в БД или проанализировать XML и проверить данные вручную?
  2. Есть ли более эффективная библиотека для HttpRequests, чем HttpURLConnection?
  3. Могут ли быть сделаны какие-либо оптимизации с потоками запросов?

Любое понимание оценено.

+0

Вы, вероятно, выиграете от клиента async http – irreputable

ответ

2

было бы более эффективным, чтобы принять хэш полезной нагрузки XML и хранить его в БД или разбора XML и проверить данные вручную?

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

Есть ли более эффективная библиотека для HttpRequests, чем HttpURLConnection?

Уверенный, используйте Apache HttpComponents. Существует несколько способов настроить его для производительности, как указано в this legacy but still relevant document.

Можно ли сделать какие-либо оптимизации с помощью нарезки запросов?

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

+0

Большое спасибо; Я буду вычислять хэш полезной нагрузки, а я теперь использую библиотеку HttpClient v4, и я немного улучшаю ситуацию. Я все еще думаю, что может быть какая-то оптимизация с потоками, я должен сделать 30k запросов в кратчайшие сроки. Если у вас есть другой совет, я бы хотел его услышать. –

+0

30k HTTP-запросов довольно много. Вы * можете * распараллелить задачи на кучу более дешевых серверных машин. Это связано с тем, что задачи загрузки не требуют интенсивного использования ЦП, поэтому использование нескольких дешевых серверов для выполнения задачи будет лучше, чем использование одного мощного сервера. – Perception

+0

Это то, о чем я думал, я скамейка, обозначающая запрос, и могу делать около 80 запросов в минуту; который займет около 6,25 часов. Если я могу разделить это на некоторых серверах на AWS, я должен быть в порядке, чтобы сделать это через час. Спасибо за помощь снова! –

Смежные вопросы