Search 快速搜索范围内的值

Search 快速搜索范围内的值,search,data-structures,Search,Data Structures,假设我们有geoip数据库:IPrangeStart,IPrangeEnd,国家 #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)?一个按范围开始值排序的数组将让您通过简单的二进制搜索找到合适的范围。我不知道您使用的地址范围有多少,但即使有一百万个地址范围

假设我们有geoip数据库:
IPrangeStart
IPrangeEnd
国家

#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)?

一个按范围开始值排序的数组将让您通过简单的二进制搜索找到合适的范围。我不知道您使用的地址范围有多少,但即使有一百万个地址范围,二进制搜索也最多需要20个探测。你可以很容易地做数以万计的查找每秒


另一个选项是a,尽管我不认为它在这种情况下特别有用,因为您没有重叠的间隔。

您可以在内存中创建四维数组,以保存从0.0.0.0到255.255.255.255的所有可能值。根据我的计算,这将需要大约8gb的内存,但您将获得最快的搜索时间。