Интересны способы хранение IP и MAC адресов.
Например, в MySQl есть способ хранения, как в двоичном, так и в текстовом формате.
кто что скажет?
Хранение IP и MAC адресов
Для начала определись, что такое бинарный вид .
Вот смотри, 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 и вторым вариантом.
Вот смотри, 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 и вторым вариантом.
таки не умеешь ты задавать вопросы
CyberMax хорошо все рассписал, да только незная задачи ты всеравно не получишь правильный ответ.
в первую очередь определись, какие операции требуются в твоей задаче.
например:
1. получение IP адресов по маске ipmask(ip, '10.1.255.255')
2. получение адресов из диапазона
и т.д...
определившись - ты сможешь решить что тебе нужно.
ну и мое личное мнение
1. сразу закладывайся на IPv6 (Int64 тебе хватит для этого)
2. мдяя... в первом сразу ответил как бы я хранил
на самом деле ф-ции преобразования в читаемый вид довольно таки дешевые...
CyberMax хорошо все рассписал, да только незная задачи ты всеравно не получишь правильный ответ.
в первую очередь определись, какие операции требуются в твоей задаче.
например:
1. получение IP адресов по маске ipmask(ip, '10.1.255.255')
2. получение адресов из диапазона
и т.д...
определившись - ты сможешь решить что тебе нужно.
ну и мое личное мнение
1. сразу закладывайся на IPv6 (Int64 тебе хватит для этого)
2. мдяя... в первом сразу ответил как бы я хранил
на самом деле ф-ции преобразования в читаемый вид довольно таки дешевые...