我获得了 200 万个 IP 地址和 2500 万个 IP 范围,其中起始 IP、结束 IP 和地理位置存储在 PostgreSQL 中。有没有一种有效的方法可以从 2500 万个数据库中查找这 200 万个 IP 的地理位置?我所做的是比较一个IP地址是否在Start IP和End 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
......