Tôi đang tìm quốc gia theo dải ip cho hàng chục triệu hàng. Tôi đang tìm cách tìm kiếm nhanh hơn.Cách nhanh hơn để tra cứu giá trị trong danh sách bộ dữ liệu là gì?
Tôi có 180K bản ghi trong mẫu đơn này:
>>> data = ((0, 16777215, 'ZZ'),
... (1000013824, 1000079359, 'CN'),
... (1000079360, 1000210431, 'JP'),
... (1000210432, 1000341503, 'JP'),
... (1000341504, 1000603647, 'IN'))
(Các số nguyên được địa chỉ ip chuyển đổi thành số đơn giản.)
này không được công việc đúng, nhưng chỉ mất quá lâu:
>>> 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
Có ai có thể chỉ cho tôi đúng hướng để có cách nhanh hơn để thực hiện tra cứu này không? Sử dụng phương pháp trên, 100 lần tra cứu mất 3 giây. Có nghĩa là, tôi nghĩ, 10 triệu hàng sẽ mất vài ngày.
Đầu tiên rõ ràng vi tối ưu hóa: 'country_result = tiếp theo (nước cho từ, đến, nước trong dữ liệu nếu ip_to_lookup> = từ và ip_to_lookup <= để)' – agf
Thứ hai: Sắp xếp các 'dữ liệu' vì vậy bạn chỉ cần để kiểm tra giới hạn dưới - ngay sau khi bạn vượt qua nó, bạn đang ở trong phạm vi bên phải. – agf
'từ' là từ khóa và không thể được sử dụng làm tên biến. –