Страница 1 из 1

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

Добавлено: 10 ноя 2006, 09:52
noisy
Интересны способы хранение IP и MAC адресов.
Например, в MySQl есть способ хранения, как в двоичном, так и в текстовом формате.

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

Добавлено: 10 ноя 2006, 15:11
Merlin
Лично я не против. Хоть в текстовом храни, хоть в бинарном...

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

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

Добавлено: 13 ноя 2006, 11:27
CyberMax
Для начала определись, что такое бинарный вид :).
Вот смотри, 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 и вторым вариантом.

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