MySQL - вычисление полей на лету и сохранение вычисленных данных

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

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

Пример 1. Допустим, вы храните данные об автомобиле. Вы храните размер топливного бака в литрах и сколько литров он расходует на 100 км. Вы также хотите знать, сколько километров он может проехать, что можно рассчитать, исходя из размера бака и экономичности. Я вижу 2 способа сделать это:

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

Поскольку экономичность автомобилей / размер бака не меняется (хотя его можно редактировать), KM - довольно статичное значение. Я не понимаю, почему мы должны рассчитывать его каждый раз при доступе к машине. Разве это не трата времени центрального процессора вместо того, чтобы просто хранить его в отдельном поле в базе данных и вычислять только при добавлении или обновлении автомобиля?

Мой следующий пример, Это почти совершенно другой вопрос (но на ту же тему), связанный с подсчетом детей.

Допустим, у нас есть приложение, в котором есть категории и элементы. У нас есть представление, в котором мы отображаем все категории и количество всех элементов внутри каждой категории. Опять же, мне интересно, что лучше. Чтобы выполнить запрос MySQL для подсчета всех элементов в каждой категории каждый раз при доступе к странице? Или сохранить счетчик в поле в таблице категорий и обновлять его при добавлении / удалении элемента?

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

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

Заранее спасибо,

Кристиан

16
задан Christian Varga 22 December 2010 в 11:28
поделиться