DudeGeo

12
[Удален]
1217

классец для определения страны пользователя по ип адресу. мб кому то пригодится

http://pyha.ru/forum/topic/4395.new#new

скорость работы

10000 ips for 1,71401500702 seconds.
1 ip for 0,000171 sec

работает на "бинарной базе", может собирать базу из csv базы maxmind.

имхо получше мускуля, ага ;)

если пригодилась, можете отблагодарить :)

Z214962204619

DeveloperRu
На сайте с 27.02.2009
Offline
72
#1

спасибо!

Вещь! (с)

Ответы на вопросы (http://telenok.com)
N
На сайте с 06.05.2007
Offline
419
#2

очередное "на тебе боже, что нам негоже" .

Ну ведь там же есть модуль на чистом пхп http://www.maxmind.com/app/php

неужели за это еще кто-то заплатил? Ниша решения непонятна.

встроенный их бенчмарк на базе Country :

php benchmark.php

Geoip Country

10000 lookups made in 0.932090997696 seconds

Geoip Country with memory cache

10000 lookups made in 0.854602098465 seconds

процессор, правда, самый топовый из lga775 :)

Кнопка вызова админа ()
dkameleon
На сайте с 09.12.2005
Offline
386
#3
bearman:
работает на "бинарной базе", может собирать базу из csv базы maxmind.

э.... а чем плоха бинарная база максмайнда?

Дизайн интерьера (http://balabukha.com/)
[Удален]
#4

netwind, если бы было не лень, я бы даже сравнил скорость ... может да, я дерьмо написал и тп и вы правы, а может и нет? платить не принуждал, да и никто не платит все равно, это "к слову"

bearman добавил 30.04.2010 в 03:40

dkameleon, незаметил, гляну на досуге

bearman добавил 30.04.2010 в 04:21

netwind:
php benchmark.php
Geoip Country
10000 lookups made in 0.932090997696 seconds
Geoip Country with memory cache
10000 lookups made in 0.854602098465 seconds

процессор, правда, самый топовый из lga775

без кеша максмайнд отсосал ненагибаясь

10000 ips for 0.160686969757 seconds.
1 ip for 0.000016debian:~/trunk#

ну и проц на всякий

debian:~/trunk# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz
stepping : 6
cpu MHz : 3163.497
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 lahf_lm
bogomips : 6331.14
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz
stepping : 6
cpu MHz : 3163.497
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 lahf_lm
bogomips : 6327.04
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

debian:~/trunk#

bearman добавил 30.04.2010 в 04:23

bearman, ну если бд в мемори положить думаю будет не 0.16 а 0.016

bearman добавил 30.04.2010 в 04:23

или другими словами - скорость foreach'а при бенчмарке)

bearman добавил 30.04.2010 в 04:30

ну и чтобы не быть пустословом

debian:~/maxmind# php benchmark.php
Geoip Country
10000 lookups made in 1.1962389946 seconds
Geoip Country with memory cache
10000 lookups made in 0.948868989944 seconds

на том же сервере

N
На сайте с 06.05.2007
Offline
419
#5

bearman, я тоже сейчас вот адаптировал ваш бенчмарк и тоже получил сильно быстрее максмайнда. похоже специфика именно этой мелкой базы.

[Удален]
#6

пошел подремлю часок :)

спасибо за спор

bearman добавил 30.04.2010 в 04:37

netwind, ну я хз как база максмайнда устроена внутри, но моя делает чтение порядка 15 байт данных из 2 файлов на поиск ипа если он попал в короткий диапазон и в среднем порядка 15 байт + 9*колво "непопавших" диапазонов, по всей бд в среднем на попадание в диапазон идет число не больше 5-10, поэтому байт 50 на ип грубо.

bearman добавил 30.04.2010 в 04:38

netwind, можно на адаптацию глянуть? интересно что там сделано)

можно в личку

N
На сайте с 06.05.2007
Offline
419
#7

bearman, ну вот именно выигрыш за счет начального быстрого позиционирования видимо срабатывает.

maxmind использует для всех баз одну и ту же похожую структуру radix tree http://en.wikipedia.org/wiki/Radix_tree, которая на больших объемах должна выигрывать за счет компактности ( база Org 140мб и она слишком забитая даже единичными IP, City 29Мб)

Ничего там особого не адаптировано, просто я подумал, что бенчмарк maxmind тормозит из-за rand() прямо в теле теста, но даже повторив тест как у вас с array_map и предварительной генерацией ничего сильно не изменилось.

Фактически, все упирается в опкоды php - где меньше циклов там и быстрее.

Для чего то серьезного все равно выгоднее собрать расширение, тесты они сами делали http://www.maxmind.com/app/benchmark.

[Удален]
#8

netwind, а, я подумал, что

netwind:
я тоже сейчас вот адаптировал ваш бенчмарк

вы в моем чтото еще изменили ))) там 5 строк)

кстати, array_map - гавно, она медленнее обычного foreach + func() это я заметил както раз, видимо пхп даже внутри форичит + call_user_func'ает ...

ну да, они исопльзовали стандартный "паттерн" так сказать для подобных вещей, мне просто было интересно это сделать :)

пошел хабр потроллю и в люлю, спокойной)

DeveloperRu
На сайте с 27.02.2009
Offline
72
#9

сколько строк IP в базе ?

[Удален]
#10

DeveloperRu, порядка 120 000 диапазонов, у меня диапазоны разбиты на блоки для быстрого поиска, блоки проиндексированы, блоков порядка 150 тыс если не ошибаюсь

bearman добавил 30.04.2010 в 04:57

база стандартная, последняя скачанная с их сайта)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий