【发布时间】:2017-09-13 17:24:49
【问题描述】:
我有一组 ip 范围,我需要查找用户给定的 ip 是否存在于给定的 ip 范围列表之间。
这是这个问题的延续
How to check if a given ip falls between a given ip range using node js
Jonas 帮助我获取了该 ip 是否存在。但我不想进行详尽的迭代搜索,我想进行快速的性能密集型搜索,因为我的 ip 范围(或数字范围)列表会很大。
我研究了 jonas 指出的布隆过滤器,但我不相信布隆过滤器可能会有所帮助。我也在看Interval Tree 但我不认为它可以搜索间隔它需要间隔作为输入。
我的ip列表范围https://github.com/client9/ipcat/blob/master/datacenters.csv#L4
如何快速搜索。我正在使用节点 js
【问题讨论】:
-
线性比较有什么问题?除非你有超过 100 万个范围,否则不应该是一个大问题
-
@juvian 只是承认它是一个广告服务器黑名单 ips,在这里我需要在几毫秒内完成它,数据将被添加到这里,即未来更多的 ip 范围。还有其他与广告投放相关的流程,所以这需要快速
-
可以有多个匹配项吗?
-
不,它应该发生,我只需要给出一个真假,它是否存在于ip范围内而不是
-
如果它们是非重叠范围,您可以将它们转换为数字范围,保持排序,然后可以在 log n 比较中进行每个查询,但您需要将所有查询都保存在内存中
标签: javascript node.js intervals interval-tree