Хранить данные профиля пользователя в таблице пользователей или в отдельной таблице профилей?
Я разрабатываю быстрый побочный проект, для которого нужна таблица пользователей, и я хочу, чтобы они могли хранить данные профиля. Я уже обращался к поставщику профилей ASP.NET, когда понял, что у пользователей будет только один профиль.
Я понимаю, что часто меняющиеся данные будут влиять на производительность таких вещей, как индексы и тому подобное, но как часто это происходит слишком часто?
Если у меня одно изменение профиля в месяц на пользователя, скажем, на 1000 пользователей, это много?
Или мы говорим больше как пользователи, меняющие данные профиля каждый час?
Я понимаю, что это не точная наука, но я пытаюсь определить, в какой момент порог начинает достигать максимума, и поскольку данные профиля моих пользователей, вероятно, будут редко меняться, если мне придется потрудиться над дополнительной работой или просто подождать несколько десятилетий для нее быть проблемой.
2 ответа
Следует учитывать, как добавление большого столбца текста в таблицу повлияет на расположение строк. Некоторые базы данных будут хранить большие столбцы, выделенные другими столбцами фиксированного размера; это приведет к изменению размера строк, а это означает, что для базы данных требуется больше работы, когда ей нужно извлечь строку с диска. Другие базы данных (например, PostgreSQL) хранят большие текстовые столбцы вдали от столбцов фиксированного размера; это приводит к строкам фиксированного размера с быстрым доступом во время сканирования таблиц и т. п., но для извлечения текстовых столбцов требуется дополнительная работа.
1000 пользователей не так уж много в терминах базы данных, так что, вероятно, не о чем беспокоиться, так или иначе. OTOH, маленькие односторонние проекты имеют неприятную привычку превращаться в реальные критически важные проекты, когда вы не выглядите так, что делать это с самого начала - хорошая идея.
Я думаю, что Джастин Кейв достаточно хорошо освещал проблему индекса.
До тех пор, пока вы правильно структурируете свой доступ к данным (т. Е. Весь доступ к вашей пользовательской таблице проходит через одну изолированную кучу кода), изменение схемы данных для пользователей в любом случае не будет большой работой.
Нужно ли индексировать информацию профиля? Или вы просто собираетесь получить его на основе USER_ID
таблицы или какой-то другой индексированный USER
столбец? Если данные профиля не проиндексированы, что, по-моему, вероятно, не влияют на производительность других индексов в таблице.
Единственная причина, по которой я могу думать о том, чтобы занести информацию о профиле в таблицу, состоит в том, что существует много данных по сравнению с необходимой информацией для определения пользователя, и если USER
таблица должна быть полностью отсканирована по некоторым причинам. В этом случае увеличение размера таблицы отрицательно скажется на производительности сканирования таблицы. Предполагая, что у вас нет сценария использования, при котором регулярно имеет смысл делать полное сканирование USERS
table, и учитывая, что таблица будет иметь только 1000 строк, это, вероятно, не имеет большого значения.