что важнее скорость(время) или пространство

У меня возник этот вопрос, когда мне дали задание, которое заставило меня ненадолго задуматься. Но не смог придумать более точного или удовлетворительного ответа.

Задание было примерно таким,
Вещи, которые у меня уже есть

  • таблица «Пользователь», содержащая сведения о пользователе. Например, createdTime, type(agent, admin, other), id и т. д. (эта таблица содержит слишком много строк (записей))

Задание, данное мне

  • создайте новую таблицу, которая будет отслеживать удаленных пользователей.
  • Затем присоединитесь к таблице «Пользователь» с этой вновь созданной таблицей и покажите пользователя, который еще не удален и имеет тип = «агент».

Теперь мой вопрос

  • «почему они просят меня создать новую таблицу вместо создания нового столбца (в таблице пользователей), в котором будет храниться флаг (верно, если пользователь удален, иначе не удален)
  • «Разве присоединение не отнимает много времени?»
  • (создание нового столбца в текущей таблице «Пользователь» поможет сохранить детали пользователя без изменений. Но создание новой таблицы — где это поможет?)

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

Это говорит о том, что он больше заботится о пространстве во время запроса.
В настоящее время мы можем получить любое количество места за деньги, но скорость важнее, верно. Если скорость меньше, то какой смысл во всем, что экономит место на диске.
Разве мы не должны больше заботиться о времени и меньше о пространстве?.

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


person govindpatel    schedule 20.02.2015    source источник


Ответы (1)


Это будет ответ, даже если он говорит лично, потому что он слишком большой для комментария:

Эти два редко отделяются друг от друга, но являются функцией друг друга.

Скорость — это не только «время запроса», но и время выполнения, включая обработку данных. От запроса к ответу.
Таким образом, если у вас есть что-то, что занимает много места, у вас больше операций ввода-вывода и больше памяти, и вам нужно тратить больше времени на доступ к данным и больше времени на передачу данных. Так что мой "ответ" будет таким:
Рассматривать оба как равные и минимизировать оба.

Это говорит о том, что он больше заботится о пространстве, чем о времени запроса. :
Нет. Это неверное предположение.

Если вы начинаете думать о нормализации и денормализации в базе данных, думая о производительности, вам всегда лучше нормализовать данные. Это нужно не только для экономии места, но и для сохранения целостности данных/данных (более быстрое обновление, меньше блокировок); Индексирование (пространство, да, но и скорость), а затем при использовании передачи данных ввода-вывода с диска на сервер, использование памяти, по сети. Кроме того, использование пространства означает использование памяти, и чем больше вещей занимают места, тем больше вы хотите поместить в память.

Все это ведет к производительности, то есть к скорости.

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

person Allan S. Hansen    schedule 20.02.2015
comment
Переход на дизайн с таким флагом не влияет на нормализацию как таковую. Таблицы разные, поэтому запросы и ограничения разные для одних и тех же результатов и целостности. Например, FK для таблицы с удаленными идентификаторами становится FK плюс CHECK, что флаг указывает на удаление; но для запроса удаленных идентификаторов теперь не требуется ГДЕ на флаге. Такое изменение особо не влияет на нормализацию базовых таблиц. Таким образом, денормализованный - неподходящее слово/понятие. Это означает что-то другое. Вы имеете в виду непрямые значения таблиц с учетом различий (подтип-супертип), важных в этом приложении. - person philipxy; 20.02.2015