2017-01-02 2 views
1

Мне нужен эффективный способ хранения IP-адреса.
Запрос, который я хотел бы сделать, это если IP находится в таблице (или в диапазоне).
мне нужно хранить диапазоны, как,django + mysql, сохраняющий IP-адрес, включая диапазоны

192.168.0.1 - 192.168.1.255 

А также отдельный IP-адрес.

Поскольку есть много записей, я думаю, что это будет пустой тратой, чтобы хранить их по одному. Но я бы пошел на это, если бы это было лучше. Django имеет GenericIPAddressField поле, но оно не хранит диапазоны.

Итак, каково мое лучшее решение?

ответ

1

У вас есть два варианта, оба из которых связаны с использованием двух столбцов.

Вариант один, магазин начать конечный IP IP

class IPmodel(models.Model): 
     start_ip = models.GenericIPAddressField() 
     end_ip = models.GenericIPAddressField() 

Вариант 2, хранить IP и маску подсети

class IPmodel(models.Model): 
     start_ip = models.GenericIPAddressField() 
     mask = models.IntegerField() 

Если вы должны были использовать вариант 1, ваш код может выглядеть

IPmodel.objects.create(start_ip='192.168.1.0',end_ip='192.168.1.255') 
IPmodel.objects.filter(end_ip__gt='192.168.1.10').filter(start_ip__lt='192.168.1.10') 

Если вы использовали опцию 2, вам нужно будет использовать функции F и стандартный расчет сетевого адреса чтобы сделать вашу фильтрацию.

+0

и как я могу запросить «is ip is in table»? – user3599803

+0

Насколько эффективнее хранить каждый IP отдельно? С точки зрения скорости запроса – user3599803

+0

Как с точки зрения скорости, так и с точки зрения хранения. – e4c5

 Смежные вопросы

  • Нет связанных вопросов^_^