Почему я должен использовать интервал вместо байта или короткий в C#

Наименее болезненный и действительно рекомендуемый Джанго способ сделать это - через свойство OneToOneField(User).

Расширение существующей модели пользователя

& hellip;

Если вы хотите сохранить информацию, связанную с User, вы можете использовать отношение один к одному к модели, содержащей поля для дополнительной информации. Эту модель «один к одному» часто называют моделью профиля, поскольку она может хранить информацию, не связанную с аутентификацией, о пользователе сайта.

Тем не менее, расширение django.contrib.auth.models.User и вытеснение его также работает ...

Подстановка пользовательской модели пользователя

Некоторые типы проектов могут иметь требования к аутентификации, для которых встроенная модель User Django не всегда подходит. Например, на некоторых сайтах имеет смысл использовать адрес электронной почты в качестве идентификационного токена вместо имени пользователя.

[Ред .: За следуют два предупреждения и уведомление, упоминая, что это довольно радикально .]

Я бы определенно держитесь подальше от изменения фактического класса User в исходном дереве Django и / или копирования и изменения модуля auth.

59
задан Breadtruck 18 July 2009 в 20:14
поделиться

6 ответов

С точки зрения производительности int работает быстрее почти во всех случаях. ЦП разработан для эффективной работы с 32-битными значениями.

Более короткие значения сложны в работе. Например, чтобы прочитать один байт, ЦП должен прочитать 32-битный блок, который его содержит, а затем замаскировать верхние 24 бита.

Чтобы записать байт, он должен прочитать 32-битный блок назначения, перезаписать младшие 8 бит желаемым байтовым значением и снова записать весь 32-битный блок.

Разумеется, вы экономите несколько байтов, используя меньшие типы данных. Итак, если вы При повторном построении таблицы с несколькими миллионами строк, возможно, стоит подумать о более коротких типах данных. (И то же самое может быть веской причиной, почему вы должны использовать в своей базе данных меньшие типы данных)

И с точки зрения корректности, int нелегко переполниться. Что если вы думаете , что ваше значение уместится в одном байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

тогда, возможно, стоит рассмотреть более короткие типы данных. (И то же самое может быть веской причиной, почему вы должны использовать в своей базе данных меньшие типы данных)

И с точки зрения корректности int не так легко переполняется. Что если вы думаете , что ваше значение уместится в одном байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

тогда, возможно, стоит подумать о более коротких типах данных. (И то же самое может быть веской причиной, почему вы должны использовать в своей базе данных меньшие типы данных)

И с точки зрения корректности int не так легко переполняется. Что, если вы думаете , что ваше значение уместится в байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

(И то же самое может быть веской причиной, почему вы должны использовать в своей базе данных меньшие типы данных)

И с точки зрения корректности, int нелегко переполниться. Что, если вы думаете , что ваше значение уместится в байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

(И то же самое может быть веской причиной, почему вы должны использовать в своей базе данных меньшие типы данных)

И с точки зрения корректности int не так легко переполняется. Что если вы думаете , что ваше значение уместится в одном байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

Что если вы думаете , что ваше значение уместится в одном байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

Что если вы думаете , что ваше значение уместится в одном байте, а затем в какой-то момент в будущем какое-то безобидное изменение кода приведет к тому, что в него будут сохранены более крупные значения?

Это некоторые из них? причин, по которым int должен быть вашим типом данных по умолчанию для всех интегральных данных. Используйте байт, только если вы действительно хотите хранить машинные байты. Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

Используйте шорты только в том случае, если вы имеете дело с форматом файла, протоколом или подобным, который фактически определяет 16-битные целые числа. Если вы вообще имеете дело с целыми числами, сделайте их целыми.

80
ответ дан 24 November 2019 в 18:16
поделиться

По большей части, «Нет».

Если вы заранее не знаете, что будете иметь дело с сотнями миллионов строк, это микрооптимизация.

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

7
ответ дан 24 November 2019 в 18:16
поделиться

Вам придется иметь дело с несколькими МИЛЛИАРДАМИ строк, прежде чем это существенно повлияет на емкость хранилища. Допустим, у вас есть три столбца, и вместо использования типа базы данных, эквивалентного байтам, вы используете эквивалент типа int.

Это дает нам 3 (столбца) x 3 (дополнительных байта) на строку или 9 байтов на строку.

Это означает, что для «нескольких миллионов строк» ​​(скажем, трех миллионов) вы потребляете целые дополнительные 27 мегабайт дискового пространства! К счастью, поскольку мы уже не живем в 1970-х годах, вам не следует об этом беспокоиться :)

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

8
ответ дан 24 November 2019 в 18:16
поделиться

Не то чтобы я не верил Джону Гранту и другим, но мне пришлось убедиться в нашей «таблице с миллионами строк». В таблице 1 018 000. Я преобразовал 11 столбцов tinyint и 6 столбцов smallint в int, уже было 5 int и 3 smalldatetimes. В 4 различных индексах использовалась комбинация различных типов данных, но очевидно, что все новые индексы теперь используют столбцы типа int.

Внесение изменений стоило мне всего 40 МБ на расчет использования диска базовой таблицы без индексов. Когда я снова добавил индексы, общая разница составила всего 30 мб. Я был удивлен, потому что думал, что размер индекса будет больше.

Значит, 30 МБ стоят хлопот, связанных с использованием всех типов данных, Ни в коем случае! Я иду на землю INT, спасибо всем за то, что вернули этого запутанного анального программиста к прямой и счастливой, блаженной жизни без целочисленных преобразований ... ура!

5
ответ дан 24 November 2019 в 18:16
поделиться

Если int используется везде, приведение типов или преобразование не требуется. Это гораздо больше, чем объем памяти, который вы сэкономите, используя несколько целочисленных размеров.

Это просто упрощает жизнь.

4
ответ дан 24 November 2019 в 18:16
поделиться

Среда выполнения .NET оптимизирован для Int32. См. Предыдущее обсуждение в .NET Integer vs Int16?

4
ответ дан 24 November 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: