отправка пакетных запросов - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть демон, который выполняет следующие действия:

  • извлекает членов сайта из базы данных mysql (я использовал LIMIT 1000 для извлечения 1000 строк одновременно)
  • отправляю информацию об этихучастники к стороннему серверу
  • помечают каждого участника как обработанного
  • Режим ожидания в течение 2 секунд
  • Получение следующей партии из 1000 «необработанных» участников и отправка третьей сторонесервер.и т. д.

Мне интересно, является ли демон php (я использую системную библиотеку Daemon) лучшим способом для выполнения этой задачи, описанной выше.

Я беспокоюсь о том, чтобы тратить слишком много памяти (так как PHP известен этим)

Я также беспокоюсь об отправке нескольких запросов на сторонний сервер, потому что в день с большим трафиком можетбудет много неполучений.

Существует ли какой-либо инструмент, кроме демона, который я могу использовать для выполнения этой задачи?Какие методы я могу реализовать, чтобы сделать это эффективным, учитывая, что есть возможность обработки более 100K строк в таблице mysql, и задача зависит от времени.Кроме того, в какой момент я должен рассмотреть возможность добавления дополнительных серверов?

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Cron должен быть очень хорошим вариантом для выполнения работы по синхронизации со сторонним сервером.Рассмотрим следующие «улучшения»:

1) Файл блокировки для предотвращения параллельного запуска нескольких заданий и получения дополнительных ресурсов от других запущенных вами процессов.А также, чтобы избежать дублирования обработки данных.

2) Если вы еще не внедрили проверку «обновления информации» и «время синхронизации» на вашей стороне.Например, если пользователь А не претерпел никаких изменений с момента синхронизации, вы не синхронизируете его снова.

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

4) Выполните собственную очистку памяти, удаляя переменные, отменяя связь файлов и даже повторно используя одни и те же переменные, чтобы у вас не было мусорных переменных, которые используются только один раз внутри скриптов.Будьте осторожны с этим, так как это может привести к запутыванию кода.

Также рассмотрите возможность использования небольших наборов данных при отправке их в php для обработки.Базы данных любят большие наборы данных, php - нет.

0 голосов
/ 02 апреля 2012

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

А теперь самое время добавить больше серверов.Я предполагаю, что сторонний сервер имеет достаточно ресурсов для обработки многих записей.Поэтому, если у вас не хватает ресурсов на вашей стороне, я бы предложил использовать репликацию MySQL для репликации ваших БД на другие серверы и запустить там вышеупомянутого демона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...