- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Предыстория: Пишу свою ТДС, для определения геоположения посетителя нужна база IP с гео привязкой. Базу решил брать ipgeobase.
Проблема: Как за минимальное время определить принадлежность поданного на вход IP к какому-либо региону?
У меня пока получается:
Берем левую и правую границу диапазона, проходим по всей базе и находим минимальный отступ нашего адреса от левой и правой границ. Считаем, что минимум - это и есть тот дипазон которому принадлежит данный адрес.
В базе 130к записей - следовательно такой процесс занимает не менее 3-4 сек. Хотелось бы свести время хотябы до 1сек, а лучше 0,5сек.
Как по-другому можно парсить?
В базе 130к записей - следовательно такой процесс занимает не менее 3-4 сек. Хотелось бы свести время хотябы до 1сек, а лучше 0,5сек.
ну у вас и проблемы .... ну да, базы - вещь с которой НЕ СЛЕДУЕТ начинать ...
начинать надо с алгоритмов и их реализаций..
вот вам например мои рассуждения старые по теме гео, база правда моя страдает, но если сильно надо будет мне, то я сделаю из ipgeobase базу которая будет обладать моментальным временем поиска.
http://hell.helldude.ru/archives/59
зы: индексы в таблице проставьте и пересмотрите запросы на предмет использования индексов
Я на одном сайтике применяю базу MaxMind с городами там вообще хз какое количество записей и работает всё очень шустро!
Вся база в одном файлике.
Применяется бинарный поиск по индексу, т.к. ip-адрес — это по большому счету целое число.
Учитывая то, что айпишники объединяются по маске, то длина поиска сокращается до размера подсети.
А в этой базе как организовано?
Или там всё в MySQL? )
Обрезание не очень пойдет. Есть вероятность, что диапазон который вырезали не имеется в точно таком виде в Базе. Наример:
У нас адрес: 62.220.34.168;
Получаем диапазон: 62.220.34.0 - 62.220.34.255;
В базе есть:
1) 62.220.0.0 - 62.220.38.255
2) 62.220.31.0 - 62.220.36.255
3) 62.220.37.0 - 62.220.37.255
4) 62.220.38.0 - 62.220.38.255
2,3,4 - входят в 1й. НО наш диапазон входит в 2, не в явном виде. Посему выйдет косяк :)
Как за минимальное время определить принадлежность поданного на вход IP к какому-либо региону?
Что для Вас регион? Просто центр-восток-запад-... , фед. округа, нужен город точно?
Базу нужно привести к виду, который нужен вам. Убрав разбивку на операторов и т.д. + собрав диапазоны воедино и убрать возможные дубли. Нет желания юзать мускул, оставьте грамотный текст. после оптимизации, строк в файле будет столько, сколько регионов в итоге Вас интересует.
Просто не нужно с молотком идти на стену.
maxmind все равно быстрее. там по-моему диапазоны не пересекаются.
ну если сильно хочется - так сделайте чтобы в вашей базе тоже не пересекались диапазоны путем разбиения вложенных блоков на несколько и решайте уже другую простую задачу.
Всем спасибо за ответы. Про "Убрать разбивку на операторов" я уже думал. Есть 1 минус. Когда я обновлю базу, придется опять эту разбивку убирать и т.д.
По отзывам у maxmind плохое качество для РУ-траффа
lstaticl, откуда 4-ре секунды?
Итог: полная информация (включая не только регион но и провайдера) менее чем за 4-ре секунды.
lstaticl, откуда 4-ре секунды?
Итог: полная информация (включая не только регион но и провайдера) менее чем за 4-ре секунды.
У меня без SQL, только по оригинальному файлу.
Писал аналогичный скрипт. Суть была в том что файл конвертировал и сохранял в формате:
214324232354.342545345345.Россия
343243243243.454354354334.Украина
затем простым циклом пробегаешся по массиву и узнаеш какой стране пренадлежит IP
for($i=0;$i<$count;$i++){
list($ip_1,$ip_2,$strana)=explode(".",$file[$i]);
if($ip>=$ip_1 && $ip<=$ip_2){
$country=$strana;
break;
}
}
в итоге проверка моментальная.
По отзывам у maxmind плохое качество для РУ-траффа
лучшее решение по Российским IP
База + скрипты
http://ipgeobase.ru/cgi-bin/Archive.cgi
http://ipgeobase.ru/cgi-bin/Software.cgi
Во вложении php скрипт