Хранить данные профиля пользователя в таблице пользователей или в отдельной таблице профилей?

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

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

Если у меня одно изменение профиля в месяц на пользователя, скажем, на 1000 пользователей, это много?

Или мы говорим больше как пользователи, меняющие данные профиля каждый час?

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

2 ответа

Решение

Следует учитывать, как добавление большого столбца текста в таблицу повлияет на расположение строк. Некоторые базы данных будут хранить большие столбцы, выделенные другими столбцами фиксированного размера; это приведет к изменению размера строк, а это означает, что для базы данных требуется больше работы, когда ей нужно извлечь строку с диска. Другие базы данных (например, PostgreSQL) хранят большие текстовые столбцы вдали от столбцов фиксированного размера; это приводит к строкам фиксированного размера с быстрым доступом во время сканирования таблиц и т. п., но для извлечения текстовых столбцов требуется дополнительная работа.

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

Я думаю, что Джастин Кейв достаточно хорошо освещал проблему индекса.

До тех пор, пока вы правильно структурируете свой доступ к данным (т. Е. Весь доступ к вашей пользовательской таблице проходит через одну изолированную кучу кода), изменение схемы данных для пользователей в любом случае не будет большой работой.

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

Единственная причина, по которой я могу думать о том, чтобы занести информацию о профиле в таблицу, состоит в том, что существует много данных по сравнению с необходимой информацией для определения пользователя, и если USER таблица должна быть полностью отсканирована по некоторым причинам. В этом случае увеличение размера таблицы отрицательно скажется на производительности сканирования таблицы. Предполагая, что у вас нет сценария использования, при котором регулярно имеет смысл делать полное сканирование USERS table, и учитывая, что таблица будет иметь только 1000 строк, это, вероятно, не имеет большого значения.

Другие вопросы по тегам