Хотя PHP отлично подходит для создания динамического веб-контента, я чувствую, что ему не хватает некоторых важных функций для выполнения высокопроизводительных фоновых операций, подобных этой.Я бы выбрал язык, который поддерживает многопоточность (мои личные предпочтения привели бы меня к C # 4.0, но это также зависит от вашей серверной платформы).
Если у вас есть поддержка многопоточности, вы можетезатем пишите потоки, которые загружают данные из базы данных, и пока они загружаются, другие потоки выталкивают уведомления.Убедитесь, что вы можете настроить, сколько потоков используется для каждой части сделки, чтобы вы могли регулировать производительность по мере необходимости.
Если один сервер не может выполнить эту работу, возможно, вы захотите посмотреть на разбиение ваших данныхна нескольких серверах.Я полагаю, что самый быстрый способ сделать это - назначить блоки записей различным серверам.
Последнее слово, получить тестовую среду, в которой вы можете смоделировать свою проблему и провести стресс-тестирование.Во время стресс-тестирования не останавливайтесь на своем целевом числе 500.000, но продвигайтесь как минимум в десять раз больше.Это будет намного эффективнее в поиске уязвимых мест вашего программного обеспечения заранее.Также было бы очень полезно иметь возможность регулировать определенные аппаратные параметры, такие как memorey, дисковый ввод-вывод, сетевой ввод-вывод и процессор.Имитируя небольшое количество любого из них, вы чувствуете, как программное обеспечение будет вести себя в определенных условиях.Этот опыт поможет вам, если вы столкнетесь с какими-либо проблемами с производительностью, и поможет вам определить требования к оборудованию.