|
Веб-утилитыОпределение страны по IPSAGE Утилита CountryByIPv4 выводит двухбуквенный код страны и название страны по заданному IPv4 адресу. Используется IP2Location™ IP-COUNTRY (DB1) база данных в CSV формате. Бесплатный вариант базы DB1.LITE доступен для свободного скачивания [1]. Утилита писалась для приблизительной оценки времени, сколько займёт парсинг подобного CSV файла. В первом варианте реализации чтение CSV файла осуществлялось в TStringList, затем парсились строки из TStringList одна за другой. Подобным образом читаются CSV файлы, например, в компоненте TjanSQL. Затем я отказался от TStringList и стал читать файл просто в строку с последующим парсингом из этой строки. Это увеличило скорость работы чуть более чем в 2 раза. Потом я понял, что очень много времени затрачивается на копирование подстрок из строки (Copy()) и на перевод строк в числа (Val()). Я отказался от перевода строк в числа, IP-адреса оставляются в строчном представлении (в таком виде как они хранятся в CSV). При поиске IP-адреса в базе происходит сравнение строк вместо сравнения чисел. Для этого необходимо добиться одинаковой длины строчного представления всех IP-адресов. Адреса короче 10 символов дополняются слева нулями. Замеры времени выполнения поиска показали, что скорость поиска практически не уменьшилась и составляет 0-2 мс. Что касается, кодов и названий стран, то необходимость в обращении к ним возникает только в случае если IP-адрес найден в базе! Следовательно, зачем тратить время на копирование всех кодов и названий стран при парсинге? Я заменил поля кода и названия страны на значения позиции строки в оригинальной CSV базе и длины строки. Эти ухищрения опять увеличили скорость работы чуть более чем в 2 раза. Итого, по-сравнеию с первым вариантом, скорость удалось увеличить примерно в 4.2 раза! В архиве прилагается исходный код всех трёх вариантов утилиты для CodeTyphon Результат запуска последней версии утилиты (система: AMD A10-7850K @ 3.70 GHz, DDR3 PC3-12800 @ 1.2 GHz): c:\>CountryByIPv4.exe 202.186.13.4 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,002 s, country code: MY, name: Malaysia c:\>CountryByIPv4.exe 19.5.10.1 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,000 s, country code: US, name: United States c:\>CountryByIPv4.exe 25.5.10.2 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,000 s, country code: GB, name: United Kingdom c:\>CountryByIPv4.exe 43.5.10.3 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,000 s, country code: JP, name: Japan c:\>CountryByIPv4.exe 47.5.10.4 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,000 s, country code: CA, name: Canada c:\>CountryByIPv4.exe 51.5.10.5 CSV database parsed in 0,042 s, 130348 rows IP address found in 0,000 s, country code: DE, name: Germany c:\>CountryByIPv4.exe 53.5.10.6 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,000 s, country code: DE, name: Germany c:\>CountryByIPv4.exe 80.5.10.7 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,001 s, country code: GB, name: United Kingdom c:\>CountryByIPv4.exe 81.5.10.8 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,001 s, country code: IL, name: Israel c:\>CountryByIPv4.exe 83.5.10.9 CSV database parsed in 0,042 s, 130348 rows IP address found in 0,001 s, country code: PL, name: Poland c:\>CountryByIPv4.exe 85.5.10.0 CSV database parsed in 0,043 s, 130348 rows IP address found in 0,001 s, country code: CH, name: Switzerland Использованные источники:[1] Free IP2Location LITE IP-COUNTRY.
Дата последнего обновления: 7-2-16 17:18:52 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2005-2021 SAGE. Все права защищены. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||