我们假设我们有geoip数据库:IPrangeStart
,IPrangeEnd
,country
。
#for, example
1.1.1.1:2.2.2.2:US
3.3.3.3:4.4.4.4:DE
等
这个数据库有很多字符串,但所有这些数据都可以完全适合内存(大约200-500Mb)。现在我们需要通过ip查找国家/地区。什么样的数据结构最适合这样做(我们当然会将所有IP转移到int)?
答案 0 :(得分:2)
按范围起始值排序的数组将允许您通过简单的二进制搜索找到适当的范围。我不知道你正在使用多少个地址范围,但即使你有一百万个范围,二进制搜索最多也需要20个探测器。你可以轻松地每秒进行数万次查找。
另一个选项是segment tree,虽然我认为在这种情况下它没有特别有用,因为你没有重叠的间隔。