PostgreSQLに保存されているStartIP、End IP、Geo-Locationsで200万のIPアドレスと2500万のIP範囲を取得しました。2500万のデータベースからそれらの200万のIPの地理的位置を検索する効率的な方法はありますか?私がしたことは、IPアドレスが開始IPと終了IPの間にあるかどうかを比較し、対応する場所を検索することでした。しかし、これは永遠にかかるようです。おそらくこれは、次の場所から{7、13、31、42}を検索するなど、一連の範囲から整数の束を検索するようなものです。
Start End Loc
1 10 US
11 20 US
21 26 CN
29 32 SE
33 45 CA
と戻る:
7 US
13 US
31 SE
42 CA
範囲が必ずしも接続されていない場合や、サイズが同じでない場合があることに注意してください。ありがとうございました!
編集
具体的な例として、私が扱っているデータは次のとおりです。
start_ip | end_ip | country | region | city |
------------------+------------------+---------+-----------+-----------+-
1.33.254.73/32 | 1.33.254.73/32 | jpn | 33 | kurashiki |
1.39.1.0/32 | 1.39.4.255/32 | ind | mh | mumbai |
1.40.144.0/32 | 1.40.145.255/32 | aus | ns | fairfield |
1.40.235.0/32 | 1.40.242.255/32 | aus | ns | sydney |
1.44.28.0/32 | 1.44.29.255/32 | aus | vi | melbourne |
1.44.82.0/32 | 1.44.83.255/32 | aus | vi | melbourne |
1.44.92.0/32 | 1.44.93.255/32 | aus | vi | melbourne |
1.44.128.0/32 | 1.44.129.255/32 | aus | vi | melbourne |
1.44.220.0/32 | 1.44.221.255/32 | aus | vi | melbourne |
......
......
そして、クエリは次のようなものです。
75.149.219.61/32
68.239.61.29/32
96.41.50.165/32
183.62.126.7/32
......