gpt4 book ai didi

node.js - 如何检查 IP 是否在给定的 IP 范围内?

转载 作者:可可西里 更新时间:2023-11-01 09:32:43 30 4
gpt4 key购买 nike

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

Check IP's Image here

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

尝试了以下方法。

  1. 我尝试过以下解决方案,但它对内存数组很有效,我需要在 40 行中找到缺少的行,因此,它不会有效。

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

最佳答案

许多 Aerospike 用户都在使用这种数据建模模式。有效的方法是让你的 fromto 列 ip 地址为 32 位整数格式,fromto 有共同的前 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 是 < to,再次是您的 ip,from,to all 以 32 位 int 格式,这将准确返回一条记录回来,如果找到的话。参见 https://www.aerospike.com/docs/guide/predicate.html这将比我描述的第一种方法慢一点,但仍可能低于 5 毫秒 - 您必须进行测试才能看到。

11/21/19 更新 - 还有另一种方法可能更容易。使用 to 字段作为 32 位整数作为记录的主键。创建另一个记录,内存命名空间,作为所有“to”条目的排序列表 - 在您的情况下为 400,000 - 这将适合一个记录。使用 LIST 类型,相对索引按值搜索并返回相对索引 0,这将返回正确的 to 值,这也是您的主键。然后您可以用它检索整个记录。两次读取,应该远低于 5 毫秒。

关于node.js - 如何检查 IP 是否在给定的 IP 范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com