1

Temat: Wieści z frontu geolokalizacji

Jako, że ze względu na Święta mam więcej niż zwykle wolnego czasu, to prace posuwają się naprzód w szybszym tempie :-).
Ukończone zostały generatory alternatywnych baz danych w formacie SQLite2 dla Geolokalizacji, gdy nie ma na serwerze modułu geoip w PHP. Jeden z nich (niezalecany ze względu na niską wydajność PHP) ma formę wtyczki do panelu, drugi jest samodzielnym skryptem napisanym w Pythonie (i jest notabene moją pierwszą "aplikacją" w tym języku ;-)). Skupię się teraz na opisie drugiego rozwiązania ze względu na jego znaczącą (kilkaset procent) przewagę wydajnościową i niezawodność w stosunku do wersji PHP.
Aby przygotować bazę musimy zaopatrzyć się w plik generator.py (dołączony w katalogu wtyczki PHP) i interpreter języka Python z obsługą modułów csv oraz sqlite (plik wynikowy musi być w formacie SQLite2). Niezbędnym składnikiem są także pliki CSV (GeoLiteCity-Blocks.csv oraz GeoLiteCity-Location.csv) wypakowane z paczki GeoLite City pobranej ze strony http://www.maxmind.com/app/geolitecity. Skrypt należy uruchomić wewnątrz katalogu, do którego wypakowaliśmy wyżej wymienione pliki. Po wygenerowaniu bazy należy przenieść plik wynikowy (geoip.sqlite) do katalogu danych (domyślnie data/) i nazwać go geoip_$DBID.sqlite, gdzie $DBID ma wartość, którą możemy znaleźć w pliku conf/config.php.
Dla porównania, wygenerowanie bazy danych o rozmiarze 267 MB z 97 MB danych wejściowych zajęło skryptowi Pythona 7 minut, natomiast skrypt PHP wygenerował w tym czasie jedynie ok. 5 MB, a nie mógł wygenerować całej ze względu na limit czasu.
Oba skrypty zaleca uruchomić się na własnym, lokalnym komputerze, nie na serwerze!

Nadszedł już czas, najwyższy czas, nienawiść zniszczyć w sobie.