2009-09-02 2 views
2

Я знаю, что уже есть некоторые вопросы по этой теме на сайте ...asp.net поставщик профиля

Я просто пытаюсь понять, если это безопасно использовать ASP.NET Profile Provider с веб-сайта с огромным трафиком?

То, как я его вижу, это неэффективно. Вы сохраняете имя свойства (которое является строкой) и значение свойства (которое также является строкой). Если вы просто пытаетесь сохранить ровный возраст в профиле, вы ненужно сохраняете строку «возраст» в базе данных снова и снова, тогда как с самосозданной таблицей вы можете просто добавить возраст с названием столбца и отсутствие избыточности?

(я просто пытаюсь, чтобы убедиться, что я не хватает чего-то об этом, потому что я довольно новыми для него.)

ответ

8

Поставщик профиля использует EAV (Entity-Attribute-Value) дизайн намеренно, потому что профили в целом очень обычно имеют малонаселенную схему, т. е. существует много потенциальных атрибутов, но лишь немногие будут использоваться для данного единого объекта, а некоторые из них будут широко варьироваться от одного объекта к другому.

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

Но что делать, если ваше заявление делает возраст обязательным? Хорошо, этот столбец заполняется для всех. Но что, если вам нужно сделать заметку в профиле, «пользователь больше не хочет видеть этот неясный диалог». Вам действительно нужен столбец для каждого отдельного диалога в вашем приложении, хочет ли пользователь его увидеть? Возможно нет. Когда вы попадаете в маленькие разовые детали применения любого значительного объема, EAV фактически становится более экономичным выбором.

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

0

Я согласен с Rex M, если вам не нужно делать такие вещи, как сортировать всех своих пользователей по возрасту или выполнять другие процедуры с данными совокупного профиля. Тогда вы могли бы подумать о том, чтобы кататься самостоятельно. Но для простого хранения свойств, которые вы получаете здесь и там по отдельности, Rex M является правильным.

0

Я знаю, что вы имеете в виду. Разве не имеет смысла подставлять таблицу поставщика поставщика другой таблицей с столбцами с обязательными полями? или вы думаете, что накладные расходы на объединение не заставят его не стоить?

+0

@progtick Я предполагаю, что вы перерегистрировались, потому что вы не можете получить доступ к учетной записи, которую вы использовали для публикации вопроса ... перейдите по адресу http://meta.stackoverflow.com и попросите их объединить свои аккаунты. Это облегчит обсуждение вопросов и разъяснений. –

+0

Я не мог этого сделать, потому что это, видимо, не воспринимает мой OpenId. – TPR

+0

@progtick, чтобы ответить на ваш вопрос, если у вас уже есть схема базы данных, может возникнуть смысл создать собственного поставщика, который использует это. Тем не менее, создание чего-то одного столбца не делает его обязательным - оно уже должно выполняться вашей логикой приложения. Как он хранится в базе данных, это не влияет на то, требуется ли это. –

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