如何检查IP是否在给定的IP范围之间?

时间:2019-07-10 07:54:28

标签: node.js database mongodb aerospike flash-memory

我有40个缺少IP范围的图像,如下图所示,需要查找该IP范围的IP详细信息。

Check IP's Image here

如何在5毫秒内有效完成此操作。需要使用哪个数据库来存储数据和查询?

尝试以下方式。

  1. 我尝试了以下解决方案,但使用内存数组将非常有效,我需要在40个缺少行的行中进行查找,因此,效率不高。

  2. 还尝试了MongoDB,将所有40个缺少的行存储在mongo集合中,使用$gte$lte查询。但是本地mongo服务器的响应时间超过150毫秒。对我来说,响应时间应小于5毫秒。

1 个答案:

答案 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是https://www.aerospike.com/docs/guide/predicate.html,这将比我描述的第一种方法慢一些,但仍可能不到5毫秒-您必须进行测试并查看。