Хорошо, я постараюсь держать это коротким, сладким и точным.
Мы производим масштабные обновления GeoIP в нашей системе, загружая файл MASSIVE CSV в нашу CMS на основе PHP. Эта вещь обычно имеет более 100 тысяч записей информации об IP-адресах. Теперь простой импорт этих данных не является проблемой, но мы должны выполнить проверки на соответствие текущим региональным сопоставлениям IP-адресов.
Это означает, что мы должны проверить данные, сравнить и разделить перекрывающийся IP-адрес и т. Д. И эти проверки должны быть выполнены для каждой записи.
Не только это, но я только что создал решение для отображения полей, которое позволило бы другим поставщикам реализовывать свои обновления GeoIP в различных форматах. Это делается путем применения правил к записям IP-адресов в обновлении CSV.
Например, правило может выглядеть так:
если 'countryName' == 'Австралия', отправьте в 'Австралийский пул IP-адресов'
Возможно, необходимо выполнить несколько правил, и каждая запись IP должна применять их все. Например, 100 тыс. Записей для проверки по 10 правилам составят 1 миллион итераций; не весело.
Мы находим, что 2 правила для записей 100 КБ занимают до 10 минут. Я полностью осознаю узкое место здесь, которое представляет собой количество итераций сдвига, которое должно произойти для успешного импорта; просто не в полной мере осведомлены о каких-либо других возможностях, которые нам, возможно, придется немного ускорить.
Кто-то рекомендовал разбивать файл на куски на стороне сервера. Я не думаю, что это жизнеспособное решение, поскольку оно добавляет еще один уровень сложности к уже сложной системе. Файл должен быть открыт, проанализирован и разделен. Затем сценарий также должен был бы перебирать фрагменты.
Итак, вопрос, учитывая то, что я только что написал, каким будет ЛУЧШИЙ метод, чтобы немного ускорить этот процесс? Обновление аппаратного обеспечения сервера JUST для этого инструмента, к сожалению, не вариант, но для начала это довольно мощные устройства.
Не так коротко, как я думал, но да. Halps? (