Я ищу страну по диапазону IP-адресов для десятков миллионов строк. Я ищу более быстрый способ поиска.
У меня есть 180 000 кортежей в этой форме:
>>> data = ((0, 16777215, 'ZZ'),
... (1000013824, 1000079359, 'CN'),
... (1000079360, 1000210431, 'JP'),
... (1000210432, 1000341503, 'JP'),
... (1000341504, 1000603647, 'IN'))
(Целые числа — это IP-адреса, преобразованные в простые числа.)
Это работает правильно, но занимает слишком много времени:
>>> ip_to_lookup = 999
>>> country_result = [country
... for (from, to, country) in data
... if (ip_to_lookup >= from) and
... (ip_to_lookup <= to)][0]
>>> print country_result
ZZ
Может ли кто-нибудь указать мне правильное направление для более быстрого способа выполнения этого поиска? метод выше, 100 запросов занимают 3 секунды. Это означает, что я думаю, что 10 миллионов строк займут несколько дней.