Тема: Зберігання в базі та обробка IP адрес
Отже, поки пишу цей пост, може й прийде якась розумна думка, інколи варто таки гарно сформулювати і записати, а якщо щей намалювати малюнок, то задача розв'язана на 50%.
Суть задачі:
користувач через свій інтерфейс може додавати айпішки в базу, позначаючи їх якимось описом - порносайти, айпішки "ворожого району", азартні ігри і так далі. Для економії місця, та й для перфомансу айпішки зберігаю проміжками, тобто замість 255 окремих записів із одним і тим же описом, можна зберегти одним записом: ххх.ххх.ххх.0/24
Цікавіше починається, коли деякі проміжки не можна зберегти одним записом, наприклад (айпішки носять лише демонстративний характер):
192.168.0.1 - 192.168.0.6
- тут є 7 айпішок, які можна зберегти наприклад, ось так:
192.168.1.1/32
192.168.1.2/31
192.168.1.4/31
192.168.1.6/32
Ну і звісно, ж у самій базі це все зберігається як числа (щоб нічого поганого не подумали ), але суть та ж - кількість записів.
Таким чином, кількість записів зменшується майже вдвічі. Але ще цікавіше починається, коли при додаванні нової айпішки потрібно перевірити її присутність в базі. Як варіант - переводити айпішки в числа і навпаки (inet_aton, inet_ntoa - є методи у Python, та й в самому MySQL), ну і бавитися з порівняннями. А ще є пошук, фільтр і так далі. Вроді би і зробив, але все воно якось виходить не дуже гарно і дуже багато багів вилазить у моїй реалізації.
Я впевнений, що така задача уже поставала неоднократно десь раніше, і Я точно не перший, хто з цим стикнувся. Але, щось не вдається нічого доброго нагуглити. Ось, може хтось з Вас, шановні, порадить якісь алгоритми, приклади і так далі.