Я работаю над проектом, в котором нам нужно сделать IP Address lookups
. Итак, для этого у нас есть наборы данных, которые будут выглядеть так, как показано ниже, и теперь следующие шаги — заполнить эти наборы данных (может быть файл csv) в файле MySql table
. Ниже приведен пример набора данных, содержащий столбцы:
ip_address country region city metro-code latitude longitude postal-code country-code region-code city-code continent-code country-code
24.32.116.116 usa tx clarksville 623 33.6103 -95.0498 75426 840 44 34918 6 us
65.29.108.232 usa mi novi 505 42.4637 -83.4604 48375 840 23 4339 6 us
66.169.99.69 usa tx ft worth 623 32.7016 -97.3823 76109 840 44 771 6 us
72.70.100.111 usa ma peabody 506 42.5332 -70.9726 1960 840 22 1392 6 us
174.252.116.137 usa va oakton 511 38.8892 -77.3222 22124 840 47 3860 6 us
68.55.144.242 usa md pasadena 512 39.1276 -76.5125 21122 840 21 4358 6 us
174.252.83.27 usa pa lancaster 566 40.0459 -76.3542 17603 840 39 333 6 us
174.78.192.31 usa ga warner robins 503 32.5958 -83.6384 31088 840 11 5052 6 us
98.192.146.235 usa fl panama city 656 30.1804 -85.5598 32404 840 10 671 6 us
71.192.181.20 usa ma springfield 543 42.1187 -72.5483 1109 840 22 967 6 us
76.183.54.227 usa tx dallas 623 32.7202 -96.6769 75217 840 44 77 6 us
69.62.143.140 usa ca granite bay 862 38.7442 -121.191 95746 840 5 49451 6 us
69.142.76.32 usa nj penns grove 504 39.707 -75.4467 8069 840 31 2335 6 us
70.173.54.93 usa nv las vegas 839 36.2059 -115.225 89108 840 29 173 6 us
98.242.8.222 usa ca fresno 866 36.7968 -119.883 93722 840 5 19 6 us
Постановка проблемы:-
Я планирую хранить START_IP_NUM
и END_IP_NUM
как BIGINT
в базе данных MySql вместо хранения IP Address
в таблице, поскольку поиск по BIGINT выполняется намного быстрее, чем поиск строки (нотация IP-адресов с точками). Так же, как у нас есть настройка базы данных для Maxmind.
Итак, мой вопрос: у нас будет отдельный Java Program
, который будет заполнять вышеуказанные наборы данных в таблице MySql. Поэтому мне нужно создать какую-то логику, которая может преобразовать приведенные выше наборы данных, как показано ниже:
start_ip_num
end_ip_num
country
region
city
metro-code
latitude
longitude
postal-code
country-code
region-code
city-code
continent-code
country-code
Я запутался, учитывая IP-адрес, как мне установить здесь start_ip_num
и end_ip_num
и сохранить его в MySql table
. Поскольку я предполагаю, что будет файл, который будет содержать наборы данных, подобные приведенным выше, а затем мне нужно прочитать этот файл и какую-то логику устройства, чтобы преобразовать IP-адрес в два BIGINT и сохранить его в таблице MySql.
И после сохранения в базе данных MySql. Я могу найти что-то подобное в MySql-
SELECT country
FROM geoip
WHERE
INET_ATON('174.36.207.186') BETWEEN start_ip_num AND end_ip_num
LIMIT 1
ОБНОВЛЕНИЕ:-
Предположим, у меня есть пара Thousands IP Address
вроде 100,000 IP Addresses
в текстовом файле с форматом, который я упомянул выше.
Теперь моя главная цель - сделать IP Address lookup
. В соответствии с этим IP Address
получите все остальные обязательные поля.
Итак, чтобы заставить эту штуку работать, я изначально планировал выгружать данные текстового файла в том виде, в котором они находятся в файле MySql table
. Таким образом, таблица MySql будет содержать столбец IP Address
и другие столбцы, как в приведенном выше примере. Но поиск в String стоит дорого.
Поэтому я подумал, что должен преобразовать эти IP-адреса в диапазон start_ip_num
и end_ip_num
, а затем вывести данные в MySql table
, так что теперь это будет выглядеть примерно так:
start_ip_num
end_ip_num
country
region
city
metro-code
latitude
longitude
postal-code
country-code
region-code
city-code
continent-code
country-code
И теперь, если мне нужно выполнить поиск, я могу встроить этот SQL query
в свой WebService eventually
-
SELECT country
FROM geoip
WHERE
INET_ATON('174.36.207.186') BETWEEN start_ip_num AND end_ip_num
LIMIT 1
Итак, вопрос заключается в том, учитывая Text file
, который будет иметь список IP Addresses
и других полей, соответствующих этому IP Address
, как мне массировать его таким образом, чтобы я мог хранить те же наборы данных в MySql в формате, который я упомянутые выше, такие как start_ip_num
и end_ip_num
, country
и другие поля.
В основном я пытаюсь следовать схеме базы данных, такой как Maxmind в настоящее время. У них также есть start_ip_num
и end_ip_num
и другие поля. И когда вам нужно выполнить поиск, вы можете выполнить поиск на основе SQL, о котором я упоминал выше, путем преобразования IP-адреса в BIGINT
с использованием INET_ATON
.