Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Тип для хранения IP-адресов.  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Добрый день, Ребята.
Хочу сделать БД для хранения IP-адресов, но не могу определиться, какой тип данных выбрать. Мне больше импонирует тип "nvarchar()", но вот проблема в том, что когда мне придется выполнять какие то действия с ними, это может мне помешать.
Самое банальное, обычная процедура "Поиска" IP в этой БД.
Как думают профессионалы?
22 апр 14, 14:46    [15916335]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Glory
Member

Откуда:
Сообщений: 104751
adimmat
Как думают профессионалы?

четыре поля tinyint
Или одно поле binary
22 апр 14, 14:48    [15916356]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Glory,
Спасибо за отклик. Но это целочисленный тип, а как Вам известно, IP содержит "." (точки).
Как мы будем сравнивать, когда будем искать какой то IP?
22 апр 14, 14:53    [15916403]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Glory
Member

Откуда:
Сообщений: 104751
adimmat
Но это целочисленный тип

_четыре_ поля tinyint.
А не одно поле int.
22 апр 14, 14:54    [15916411]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5126
adimmat
IP содержит "." (точки)
parsename ну или как вариант создать свой тип
22 апр 14, 14:58    [15916446]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Glory, Я прошу прощения, сразу не понял! Спасибо.
Ну а как Вы думаете, каким из этих двух переменных, лучше всего работать?
В частности, чтобы написать процедуру поиска!
22 апр 14, 14:58    [15916447]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Glory
Member

Откуда:
Сообщений: 104751
adimmat
В частности, чтобы написать процедуру поиска!

Нужно угадать все варианты ваших поисков ?

adimmat
Ну а как Вы думаете, каким из этих двух переменных, лучше всего работать?

Каких еще переменных ?
22 апр 14, 15:02    [15916490]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Тип int вполне справляется с хранением Ipv4-адресов.
22 апр 14, 15:05    [15916533]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
adimmat, мое мнение - сильно зависит от предполагаемой "нагрузки".

любой ИП удачно укладывается в 4 байта.
Соответственно ничего не надо выдумывать - берите Int.

Для удобства можно сделать обвязку в виде функций IP2Int/Int2IP + вычисляемое не материлизованное поле для Int2IP.


Если система высоконагруженная, то будет эффективней 4 байта по раздельности хранить + индекс по каждому + вычисляемое матрилизованное поле типа varchar для склейки + обвязка из хранимых процедур, где с клиента будет поступать текст => парсинг => сохранение.
В таком случае поиск по маске вообще тривиальная задача.
22 апр 14, 15:19    [15916686]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Mikle83
adimmat, мое мнение - сильно зависит от предполагаемой "нагрузки".

любой ИП удачно укладывается в 4 байта.
Соответственно ничего не надо выдумывать - берите Int.
Оптимистичненько...
И что нам скажет INT в ответ на IPv6?
2001:0db8:0000:0000:0000:ff00:0042:8329
Или "сокращенные" варианты вида 2001:db8:0:0:0:ff00:42:8329 или 2001:db8::ff00:42:8329, которые в принципе то же самое...
22 апр 14, 15:26    [15916762]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Mikle83, Спасибо за ваш детальный ответ.
Но у меня задача не такая уж и глобальная, чтобы вдаваться в такие подробности, как Маска, Хост и.т.д.
Я просто хочу завести таблицу в которой будет диапазон IP адресов и в другой таблице сами IP адреса, которые входят в определенный диапазон.
Затем, я пишу процедуру, которая в качестве входного параметра получает IP адрес и сравнивает с теми, которые есть у меня в БД, если такой IP есть, то он должен мне вывести диапазон, которому он принадлежит.
22 апр 14, 15:32    [15916809]     Ответить | Цитировать Сообщить модератору
 Re: Тип для хранения IP-адресов.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Парсинг IP6 10902321
Решение вашей задачи для IP4 9280409

Спор какой подход лучше (там и IP4 и IP6).
23 апр 14, 01:34    [15919915]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить