2012-04-06 6 views
1

Ich versuche, Maxmind-Datenbank zu verwenden, um die Stadt einiger IP herauszufinden. (http://www.maxmind.com/app/geolitecity) Es gibt zwei Tabellen:
ersten Tabellenspalten:
startIpNum, endIpNum, LOCID
2. Tabellenspalten:
LOCID, Land, Region, Stadt, postal, Breite, Länge, metroCode, VORWAHL
Schnell Erklärung: Ich verwende die erste Tabelle, um die Standort-ID der Tabelle zu erhalten, und dann kann ich die Informationen dieses Standortes aus der zweiten Tabelle abrufen. Ok, vergessen wir den zweiten Teil des Prozesses. Um den ersten Teil zu erreichen benutze ich mysql und um den locId zu bekommen benutze ich den nächsten Code.Maxmind ip to city - mysql Indizierung

SELECT locId FROM first_table WHERE startIpNum<=IP and endIpNum>=IP LIMIT 1 

Wo IP ist ein * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d (von ip => abcd, zB 197.248.67.1, a = 197, b = 248 .. und so weiter), das bedeutet, dass wir über Vergleiche zwischen ganzen Zahlen sprechen. Hier ist das Problem, diese Operation ist zu langsam. Mein zweiter Gedanke war, einen Index verwenden, also habe ich versucht, einen Index wie folgt zu verwenden:

CREATE INDEX test ON first_table (startIpNum,endIpNum,locId) 

Vielleicht ist es nicht die beste Index der Welt, aber ich dachte, dass die beste Lösung für mein Problem war ... und Naja ... ist es nicht. Der Prozess ist immer noch ziemlich langsam wie 10 Sekunden. Irgendwelche Ideen???? Übrigens hat diese Tabelle fast 3,5 Millionen Zeilen. Aber ich kenne das Problem, es ist der Operator weniger als und mehr als, aber ich weiß nicht, was ich noch tun kann. Vielen Dank für Ihre Hilfe.

Antwort

0

sind einige Dinge aus Ihrer Frage nicht klar:

Dauert es 10 Sekunden bis 1 IP aussehen?

Wie viele IP-Adressen suchen Sie, um die Stadt zu finden?

Sind diese beiden Tabellen aus dem CSV-Format von maxmind erstellt oder sind es Ihre Daten?

Haben Sie das CSV-Format der maxmind-Datenbank verwendet? Ich würde vorschlagen, das binäre Format zu verwenden, es ist viel schneller.

+0

wie 6 Millionen, ich habe festgestellt, dass ich es mit mysql GIS machen kann, also werde ich in ein paar Tagen daran arbeiten ... – silgon