我有40个缺少IP范围的图像,如下图所示,需要查找该IP范围的IP详细信息。
如何在5毫秒内有效完成此操作。需要使用哪个数据库来存储数据和查询?
尝试以下方式。
我尝试了以下解决方案,但使用内存数组将非常有效,我需要在40个缺少行的行中进行查找,因此,效率不高。
还尝试了MongoDB,将所有40个缺少的行存储在mongo集合中,使用$gte
和$lte
查询。但是本地mongo服务器的响应时间超过150毫秒。对我来说,响应时间应小于5毫秒。
答案 0 :(得分:3)
许多Aerospike用户都使用此数据建模模式。有效的方法是将 from 和 to 列的IP地址设置为32位整数格式,将 from 和 to 具有共同的前24位。
例如:从:1.0.0.0到:1.0.0.255-存储为32位整数。您使用主键查找该记录,并将其设置为通用的24位值。即1.0.0作为24位整数。因此,如果要查找1.0.0.21 ...,只需继续在“ 1.0.0”主键中查找数据。
在Aerospike上,这种读取速度可以达到亚毫秒级。
在您的情况下,您的范围不一致。因此,您有两种选择-1-如上文所述,以24位通用格式重新创建数据,这将使某些行变为多行,但是查找将非常快。例如,从:1.0.0.0到:1.0.1.255将使用其余的相同数据分隔为1.0.0.0-1.0.0.255和1.0.1.0至1.0.1.255。这意味着更高的记录总数,这对于Aerospike而言不是问题-您可以轻松存储数十亿条记录,而不会影响单个记录的读取延迟。
或者您可以在“ from”-您的ip> from上使用二级索引查询,并添加谓词过滤器表达式,其中您的ip是