Почему схемы базы данных часто содержат 32, 64, 128 и т. Д. - PullRequest
9 голосов
/ 23 февраля 2012

Я понимаю, что 2, 4, 8, 16, 32, 64, 128, 256 ... являются десятичными эквивалентами двоичных цифр.

Есть ли причина, по которой они используются в базах данных? Например, поля VARCHAR часто имеют длину 255 символов. Поскольку (я предполагаю) каждый символ составляет один байт, почему существует разница между использованием 255 символов и использованием 257 символов?

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

В столбцах varchar длина сохраняется с данными с использованием целых чисел без знака в старших байтах данных. Наименьшее количество байтов используется; один байт может хранить длины от 0 до 255, два байта от 0 до 65535 и т. д. Делая длину 255, вы получаете «наибольшее значение» из минимального одного байта длины.

В минувшие дни отдельные байты диска, сохраненные в строке, стоили сохранения. Несмотря на то, что сейчас диск дешев, мышление осталось, особенно у седых администраторов баз данных.

Нет никакого преимущества в выборе длины, которая является степенью 2, например varchar(64) - это просто привычка / соглашение (я даже следую этому - и я не знаю почему!).

1 голос
/ 23 февраля 2012

Это больше привычка, чем все остальное. В varchar (32) или varchar (64) нет ничего волшебного, точно так же нет ничего волшебного в настройках по умолчанию, которые визуальные инструменты пытаются использовать вместо вас (например, varchar (50)). Многие из этих верхних границ были внедрены в головы людей, так как 640k было бы достаточно памяти для любого, и нам действительно нужно было беспокоиться о каждом байте.

Во многих случаях это сводится к общему пониманию. В предыдущей системе, в которой я работал, менеджеры по продуктам понятия не имели, каковы их требования. Они хотели сохранить имя, но не знали, из чего в действительности состоит домен имен, - но один из них заявил, что слышал о фамилии> 50 символов, поэтому он знал, что это должно быть больше 32 и более 50. Мы вернулись с 64, он согласился, что этого достаточно, и это то, что все еще существует сегодня AFAIK.

Хотя у нас была техническая причина для электронной почты (varchar (320)), которая в то время по стандарту определялась как 320 символов, потому что 64 символа для имени пользователя / localpart, 255 символов для имени домена и 1 символ для @ , Большинство других решений основывались на приоритете (например, все последующие имена следовали модели nvarchar (64), как указано выше) или логике (например, URL-адреса не обязательно должны быть nvarchar (max), но в зависимости от стандарта и возможностей браузера на В то время они были, я полагаю, либо varchar (2048), либо varchar (4096). В этом случае не потому, что это была степень 2, а потому, что чье-то программное обеспечение или стандарты создавали свои вещи для использования степени 2.

1 голос
/ 23 февраля 2012

Данные в базах данных часто организованы в страниц . Эти страницы почти повсеместно выровнены с границами памяти для управления памятью и кешем. Выбор 2 ^ n размеров для ваших данных полезен для оптимизации использования пространства в вашей базе данных.

Примечание. В зависимости от механизма СУБД 256 может быть не лучшим выбором для строк переменной длины с точки зрения выравнивания памяти, поскольку длина строки также занимает место, то есть varchar(256) занимает 258 байт.

1 голос
/ 23 февраля 2012

Не только схемы базы данных, но и практически любой программный артефакт будет содержать много чисел вида 2 ^ N или 2 ^ N-1. Хотя некоторые из этих применений имеют смысл (например, 2 ^ 32-1, являющееся наибольшим числом, представляемым как стандартное целое число без знака во многих архитектурах компьютеров), в большинстве случаев использование степеней 2 менее необходимо. На практике старые хакеры считают силы 2 священными и почитают их такими.

...