Redis или Mongo для определения, попадает ли число в диапазон?

Мне нужен способ быстро проверить, попадает ли IP-адрес в один из многих запрещенных диапазонов IP.

В настоящее время я использую iptables, чтобы проверить, попадает ли IP в указанный диапазон. Это отлично работает для нескольких тысяч диапазонов, но это число может резко возрасти до нескольких сотен тысяч и будет продолжать расти.

Другой проблемой моего текущего метода простого добавления новых правил в iptables является увеличение количества дубликатов.

Мне нужен эффективный метод проверки того, попадает ли IP-адрес или диапазон в существующий (больший) диапазон, прежде чем он будет добавлен в набор правил.

Ruby - это язык, с которым я наиболее знаком, но какие структуры данных были бы лучшими вариантами для постоянно растущего числа диапазонов?

Одно из решений, которое я придумал, - использовать наборы Redis или, возможно, MongoDB для хранения отдельных IP-адреса как целые числа, а затем просто проверьте, существует ли IP-адрес в наборе ... но моя интуиция подсказывает мне, что должен быть более умный способ.

Если бы я должен был преобразовать IP-адреса в целые числа и сохранить диапазоны, какой был бы оптимальный способ просмотреть диапазоны, чтобы увидеть, может ли новый IP-адрес или диапазон уже охватываться существующим большим диапазоном?


Заключительное примечание : скорость важнее затрат на память.

5
задан Marco 24 December 2011 в 05:02
поделиться