6

私は、私たちがしなければならないプロジェクトに取り組んでいます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_NUMand END_IP_NUMasを格納することを計画しています。Maxmind のデータベースをセットアップしたように。BIGINTIP 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_numend_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 AddressesIP Addressstart_ip_numend_ip_numcountry

基本的には、Maxmind が現在持っているようなデータベースのパターンに従おうとしています。またstart_ip_numend_ip_numおよびその他のフィールドもあります。また、ルックアップを行う必要がある場合は、IP アドレスBIGINTINET_ATON.

4

3 に答える 3

1

IPv4アドレスには4つの番号が含まれ、各番号の範囲は0〜255です。

このロジックを使用して、アドレスABCDを32ビット整数(または必要に応じてbigint)に変換できます。

Result = (A<<24) | (B<<16) | (C<<8) | D

ここで、A、B、C、Dは整数です。これは私たちが使用する方法であり、これはもともとMaxMindに対してテストされたものだと思います。(正確にJavaの例ではない場合はお詫びします)

于 2013-03-12T09:31:04.607 に答える
0

あなたは、IpAddressと世界のその物理的な場所との間にある種の厳しい関係を築いているようです。たとえば、密接に関連する2つのIpAdressがニューヨークからのものである場合、これら2つのIpAdresseの間に値を持つすべてのIpAdresseもニューヨークからのものである必要があります。右?

間違い!

世界中でのIPアドレスの配布は完全に恣意的であり、IPアドレスは通常、国、地区、大企業などにブロックで配布されます。その後に何が起こるかは多かれ少なかれ恣意的です。たとえば、MicrosoftやGoogleのような大企業には、独自のIPアドレスのブロックがあります。ただし、それを使用して行うことは完全に任意であり、Microsoftが1つのIPアドレスを使用して行うことを選択することは、次または前のアドレスとは完全に異なる可能性があります。ネットワークトポロジが変更されたため、あるIPアドレスが1つの国を指し、別の国が翌日を指す可能性もあります。

IPアドレスとその物理的な場所の関係を築くには、非常に大規模なデータベースが必要であり、この場合でも、エラーや日々の変更が非常に発生しやすくなります。Googleが使用するデータベースでさえ、おそらくエラーでいっぱいです。その広範なデータにもかかわらず。

于 2013-03-12T21:31:26.760 に答える
0

IP アドレスに生データがあり、それを範囲形式で表現したいと考えています。これがどのように機能するかのフローチャートです。

1) すべての IP アドレスを IP 番号に変換する 2) IP 番号を昇順に並べ替える 3) レコードをスキャンし、同じ都市のレコードを圧縮する

たとえば、IP 1 と IP 2 は都市 X にあります。1,2,X と表すことができます。

ここでの前提は、ほとんどすべての IP アドレスを持っていることです。2 つの数字の間に欠落がある場合は、同じ都市 X からのものであると想定する必要があります。たとえば、IP 1 と IP 3 は都市 X にあり、X にも IP 2 があると想定しています。1,3,X.

于 2013-03-13T00:37:39.880 に答える