Ich suche Land nach IP-Bereich für mehrere Millionen Zeilen. Ich bin auf der Suche nach einem schnelleren Weg zum Nachschlagen.
Ich habe 180K Tupel in dieser Form:
%Vor%(Die Ganzzahlen sind IP-Adressen, die in einfache Zahlen umgewandelt werden.)
Das macht den Job richtig, aber dauert nur zu lange:
%Vor%Kann mir irgendjemand in die richtige Richtung zeigen, um diese Suche schneller durchzuführen? Bei Verwendung der obigen Methode benötigen 100 Suchvorgänge 3 Sekunden. Das heißt, ich denke, 10 Millionen Zeilen werden mehrere Tage dauern.
Unter der Annahme, dass Ihre Situation einige Anforderungen erfüllt, gibt es eine Möglichkeit, die Laufzeitkomplexität im Durchschnitt auf O(1)
zu reduzieren, aber die Platzkomplexität leidet.
Unten ist eine sehr naive Implementierung. Es wählt die ersten zwei Oktette der IP als signifikant aus, egal was passiert, verkettet dann die signifikanten Oktette als ganze Zahlen und fügt schrittweise einen Schlüssel für jeden Wert zwischen Minimum und Maximum hinzu. Wie Sie wahrscheinlich feststellen können, gibt es viel Raum für Verbesserungen.
%Vor%