Хранение IP и MAC адресов

Модераторы: kdv, CyberMax

Ответить
noisy
Сообщения: 25
Зарегистрирован: 27 окт 2004, 13:21

Хранение IP и MAC адресов

Сообщение noisy » 10 ноя 2006, 09:52

Интересны способы хранение IP и MAC адресов.
Например, в MySQl есть способ хранения, как в двоичном, так и в текстовом формате.

кто что скажет? :)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 10 ноя 2006, 15:11

Лично я не против. Хоть в текстовом храни, хоть в бинарном...

noisy
Сообщения: 25
Зарегистрирован: 27 окт 2004, 13:21

Сообщение noisy » 13 ноя 2006, 10:10

Merlin писал(а):Лично я не против. Хоть в текстовом храни, хоть в бинарном...
да. видать я не умею задавать вопросы....

Как хранить в бинарном виде?
нужно свою UDF писать преобразования в текстовый/бинарный вид?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 13 ноя 2006, 11:27

Для начала определись, что такое бинарный вид :).
Вот смотри, IP у нас состоит из 4 байт (пока забудем, что есть IPv6). Для удобства пользователя, ввод/вывод делается с разделением байт точкой. Что это дает:
1. Возможность хранения IP в текстовом виде: "192.168.1.1", "172.45.14.100" и т.д. Для хранения достаточно 4*3 (255 - это три символа) + 3 (точки между ними) = 12+3=15 символов (VARCHAR(15)).
Плюс: наглядность.
Минус: большой размер поля.

2. Возможность хранения IP в двоичном (бинарном) виде, то есть в виде четырехбайтового целого, то бишь INTEGER. Но для этого надо делать преобразования из INTEGER в строковый и обратно.
Плюс: наибыстрая скорость поиска по такому полю. Наименьший размер поля (4 байта).
Минус: преобразование в строку в запросе придется делать через свою функцию (в delphi есть функции прямого доступа к байтам Integer), иначе это будети медленно.

3. Возможность хранения IP в двоичном виде, но каждый байт раздельно. Создаем домен D_BYTE и соответственно четыре поля под каждый байт адреса.
Размер поля - 8/16/32 байта (SmallInt, Integer, Int64).
Среднее между 1 и вторым вариантом.

bachin
Сообщения: 16
Зарегистрирован: 20 апр 2006, 17:17

Сообщение bachin » 13 ноя 2006, 12:33

таки не умеешь ты задавать вопросы :)
CyberMax хорошо все рассписал, да только незная задачи ты всеравно не получишь правильный ответ.
в первую очередь определись, какие операции требуются в твоей задаче.
например:
1. получение IP адресов по маске ipmask(ip, '10.1.255.255')
2. получение адресов из диапазона
и т.д...
определившись - ты сможешь решить что тебе нужно.
ну и мое личное мнение
1. сразу закладывайся на IPv6 (Int64 тебе хватит для этого)
2. мдяя... в первом сразу ответил как бы я хранил :)
на самом деле ф-ции преобразования в читаемый вид довольно таки дешевые...

Ответить