NoSql: перечисления против строк - PullRequest
2 голосов
/ 16 февраля 2011

Просто интересно, как другие справляются с enums & nosql? Лучше ли хранить атрибут в виде значения перечисления или строки? Влияет ли это на размер или производительность базы данных в некоторых случаях? Например, просто подумайте, скажем, о профессиональном спортивном игроке ... его тип спорта может быть футбол, хоккей, бейсбол, баскетбол и т. Д.

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Вы должны использовать в своем коде перечисления - строгая типизация помогает избежать множества ошибок - и преобразовывать их в строки или числа для хранения.

Строки действительно требуют значительно больше места для хранения - «Баскетбол» составляет 10-20 байт в зависимости от кодировки, и если вы сохраняете его как 4, ему нужен только 1 байт. Тем не менее, есть очень мало случаев, когда это действительно имеет значение - если у вас миллион записей, разница в общем размере базы данных все равно будет меньше 20 МБ. Со строками легче работать и с меньшей вероятностью произойдет сбой без вывода сообщений при изменении перечисления, поэтому используйте строки.

Строки также медленнее, чем числа, для большинства операций, включая преобразование в enum при загрузке. Однако разница на несколько порядков меньше, чем время, необходимое для извлечения чего-либо из базы данных, поэтому не имеет значения.

1 голос
/ 16 февраля 2011

String лучше с точки зрения мобильности. И Enum не поддерживается популярными СУБД, такими как MSSQL Server и многими другими.

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

EDIT:

Мои предпочтения изменены на String: CakePHP ( для веб-приложений ) больше не поддерживают Enum в отношении переносимости.

...