0

Я использую идентификатор ASP.NET MVC 5. Я разрешил EF-код сначала создавать таблицы базы данных для меня. PasswordHash, SecurityStamp и PhoneNumber - все nvarchar (MAX) - но когда я смотрю их контент, они намного короче.ASP.NET Identity - изменить код сгенерированной длины поля базы данных для производительности

Для моего основного DAL я использую Dapper - хотя я позволяю EF обрабатывать Identity.

По причинам производительности базы данных я могу сократить эти поля MAX, гарантируя, что Identity все еще функционирует правильно - и если да, то какой длины?

(Я предполагаю, что могу использовать все, что мне нравится, с помощью PhoneNumber, поскольку я контролирую содержимое этого поля, но я не уверен в отношении других 2).

Я не могу найти что-либо упоминающее об этом в Интернете.

+3

Показатели эффективности? Вы действительно думаете, что это поможет? Обязательная ссылка для любого перфо-вопроса: https://ericlippert.com/2012/12/17/performance-rant/ – DavidG

+0

Это не очень хорошая практика, чтобы иметь много полей MAX - и здесь действительно нет никакой веской причины. Но эй, когда вы используете EF, вы все равно будете закрыты;) perf - это не просто «может ли сервер взять его» - это «может ли это быть более отзывчивым», лучше перфект - это победа во многих отношениях от масштабирования до ответа время использования диска. – niico

+0

Вы правы, но вряд ли у вас будут миллионы пользователей, поэтому на самом деле это не так. – DavidG

ответ

0

Я не совсем уверен, насколько это поможет вам с производительностью, но вы можете настроить свойства идентификаторов с помощью текучего API:

public class YourContext : IdentityDbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Make you you do this BEFORE the code below 
     base.OnModelCreating(modelBuilder); 

     //Assuming your user class is called "User" here: 
     modelBuilder.Entity<User>() 
      .Property(e => e.PasswordHash).HasMaxLength(100); 

    } 
} 

Имейте в виду, хотя, если вы сделаете эти поля несовместимы с значения, которые Framework Identity хочет вставить, тогда вы столкнетесь с проблемами. Поэтому я бы рекомендовал довольно большое значение для максимальной длины.

+0

Thx. Итак, нет документации о том, как долго эти области должны быть? – niico

+0

Не знаю, как долго они должны быть, но это может дать больше информации http://stackoverflow.com/questions/20621950/asp-net-identity-default-password-hasher-how-does-it-work-and- is-it-secure – DavidG

+0

flipping this на его голове - есть ли какие-либо преимущества для этого? Как правило, мне нравится держать вещи как можно ближе к шаблону. Если мало пользы от изменения этих ценностей или нет, я думаю, что просто оставлю их как есть. – niico

0

Разница в SQL Server (я предполагаю, что это то, что вы используете) производительность при условии, что nvarchar (x) vs nvarchar (Max) - это когда вы выполняете поиск в этих полях. То есть select * from users where phoneNumber='123456789'.

Но поля, которые вы упоминаете, не подлежат обложению where в любом месте стандартного шаблона идентификации. Даже не SecurityStamp и определенно не на PasswordHash. Пользователи ищут по электронной почте, имени пользователя, идентификатору. И они для вас уже ограничены - 256 символов (see source, прокрутите до OnModelCreating). С индексом, нанесенным на столбец UserName.

Так что независимо от того, что вы говорите, вы не существуете.

Если вы делаете много поисков по электронной почте, вы можете применить индекс на столбец Email - это столько, сколько вы можете повысить производительность. То же самое касается номера телефона - если вы просматриваете пользователей по телефонным номерам, имеет смысл сделать этот столбец ограниченной длины и применить индекс.

+0

Спасибо - я должен был сформулировать вопрос по-другому, а не только о производительности. Таким образом, в основном просто придерживаться всех полей по умолчанию, вряд ли будет иметь реальный мир, не так ли? Нет никакой пользы в их изменении (не только в столбцах MAX, но также, скажем, изменении длины электронной почты от nvarchar (256) до nvarchar (100)?) – niico

+0

нет веских оснований делать только ради того, чтобы делать Это. Если вы не занимаетесь сохранением байтов хранения: «Для каждого непустого столбца varchar (max) или nvarchar (max) требуется 24 байта дополнительного фиксированного распределения» из [документации] (https://msdn.microsoft.com/en -GB/библиотека/ms186939.aspx). Но почему-то я чувствую, что вас не волнует 24 байта. – trailmax

+0

«... Хед-хилл невелик, так что это не огромная сделка во всех, кроме самых больших приложений, но если вы знаете, что ваши данные могут вписываться в поле varchar (n), то лучше использовать большое значение n, чем Макс. Макс - это защитная сетка, но если вам это не нужно, не ставьте его ». <В основном дизайнеры Identity ленились/сохраняли гибкость на стороне db. Эти маленькие перфомансы удаляются, хотя: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4d9c6504-496e-45ba-a7a3-ed5bed731fcc/varcharmax-vs-varchar255 – niico

 Смежные вопросы

  • Нет связанных вопросов^_^