indexing - IP 地址的索引范围搜索算法

标签 indexing ip-address search

给定一个包含 100 亿个 IPv4 范围的 ACL 列表,在 CIDR 通知中或在两个 IP 之间:

x.x.x.x/y
x.x.x.x - y.y.y.y

用于测试给定 IP 地址是否满足一个或多个 ACL 范围的标准的有效搜索/索引算法是什么?

让我们假设大多数 ACL 范围定义跨越大量 C 类块。

通过哈希表索引点很容易,但请尝试,因为我可能无法提出一种合理的方法来检测哪些点被大量“线”覆盖。

有一些想法,比如在某个细节级别建立索引提示——比如在 C 类级别预先计算涵盖该点的每个 ACL,但表会太大......或者某种 KD 树来动态设置细节级别.

还认为可能有碰撞检测算法可以解决这个问题。

任何关于正确方向的提示或指示?

最佳答案

你可以看看Interval tree找到与任何给定间隔或点重叠的所有间隔。

对于非重叠的 ip 范围,您可以使用 b 树或紧凑尝试,如 Judy arrays (64-bits)用于索引和搜索(将 start-ip 存储为键,将 end-ip 存储为值)。

关于indexing - IP 地址的索引范围搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042366/

相关文章:

java - 从深层链接中的 Intent 获取空值

mysql - 在 MySQL 中,将要求和的两列转换为索引有好处吗?

sql - 根据使用的 where 子句对正确的列建立索引

.net - 在 WCF RIA 服务中获取 IP

PHP PDO MySQL 查询 LIKE -> 多个关键字

pandas - 通过单个列搜索具有分层索引的Pandas Dataframe

rust - 为什么我不能在模式匹配时使用常量,即使它实现了 PartialEq 和 Eq?

javascript - 如果打开新选项卡,e.preventDefault() 不会阻止 CTRL + s 的默认功能

mysql - 在 MySQL 中使用停用词进行全文搜索

language-agnostic - 如何将 IP 地址的十进制表示转换为二进制?