私は、私たちがしなければならないプロジェクトに取り組んでいます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
問題文:-
BIGINT に対してルックアップを行う方が文字列 (点線の ip 表記) を検索するよりもはるかに高速であるため、テーブルに格納する代わりに、MySql データベースにSTART_IP_NUM
and END_IP_NUM
asを格納することを計画しています。Maxmind のデータベースをセットアップしたように。BIGINT
IP Address
私の質問は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 アドレスを 2 つの 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
、上記の例と同じように、列と他の列が含まれます。しかし、文字列を検索するのはコストがかかります。
だから私はそれらの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
リストを持つa が与えられた場合、同じデータセットを MySql に上記のような形式で保存できるようにどのようにそれをマッサージする必要がありますと、およびその他のフィールド。IP Addresses
IP Address
start_ip_num
end_ip_num
country
基本的には、Maxmind が現在持っているようなデータベースのパターンに従おうとしています。またstart_ip_num
、end_ip_num
およびその他のフィールドもあります。また、ルックアップを行う必要がある場合は、IP アドレスBIGINT
をINET_ATON
.