Okay, ich werde versuchen, mich kurz zu fassen und auf den Punkt zu kommen.
Wir führen umfangreiche GeoIP-Updates in unserem System durch, indem wir eine MASSIVE CSV-Datei in unser PHP-basiertes CMS hochladen. Diese Datei enthält in der Regel mehr als 100.000 Datensätze mit IP-Adressinformationen. Ein einfacher Import dieser Daten ist überhaupt kein Problem, aber wir müssen sie mit unseren aktuellen regionalen IP-Adresszuordnungen abgleichen.
Das bedeutet, dass wir die Daten validieren, überlappende IP-Adressen vergleichen und aufteilen müssen usw.. Und diese Prüfungen müssen für jeden einzelnen Datensatz durchgeführt werden.
Darüber hinaus habe ich gerade eine Lösung für die Feldzuordnung entwickelt, die es anderen Anbietern ermöglicht, ihre GeoIP-Aktualisierungen in verschiedenen Formaten zu implementieren. Dies geschieht durch die Anwendung von Regeln auf IPs-Datensätze innerhalb der CSV-Aktualisierung.
Eine Regel könnte zum Beispiel so aussehen:
wenn 'countryName' == 'Australia' dann an den 'Australian IP Pool' senden
Es kann mehrere Regeln geben, die ausgeführt werden müssen, und jeder IP-Eintrag muss sie alle anwenden. Bei 100k Datensätzen, die anhand von 10 Regeln zu prüfen sind, würde dies 1 Million Iterationen bedeuten - kein Spaß.
Wir haben festgestellt, dass die Verarbeitung von 2 Regeln für 100k Datensätze bis zu 10 Minuten dauert. Ich bin mir des Engpasses voll bewusst, der in der schieren Menge der Iterationen besteht, die für einen erfolgreichen Import erforderlich sind; ich bin mir nur nicht voll bewusst, welche anderen Optionen wir haben, um die Dinge etwas zu beschleunigen.
Jemand hat empfohlen, die Datei serverseitig in Teile aufzuteilen. Ich glaube nicht, dass dies eine praktikable Lösung ist, da es ein bereits komplexes System um eine weitere Ebene erweitert. Die Datei müsste geöffnet, geparst und aufgeteilt werden. Dann müsste das Skript auch noch über die Chunks iterieren.
Die Frage ist also, in Anbetracht dessen, was ich gerade geschrieben habe, was wäre die BESTE Methode, um diesen Prozess ein wenig zu beschleunigen? Upgrading der Server-Hardware NUR für dieses Tool ist leider keine Option, aber sie sind ziemlich High-End-Boxen mit zu beginnen.
Nicht so kurz, wie ich dachte, aber ja. Halbsätze? :(