Я прошу прощения, если это было задано ранее, но я не могу найти ответ на мой вопрос о вычислениях на лету против хранения полей в базе данных.
Я прочитал несколькостатьи, в которых предлагалось рассчитывать, когда это возможно, предпочтительнее, но я просто хотел бы знать, относится ли это к следующим двум примерам.
Пример 1. Скажем, вы храните данные, относящиеся к автомобилю.Вы храните размер топливного бака в литрах и сколько литров он использует на 100 км.Вы также хотите знать, сколько КМ он может проехать, что можно рассчитать по размеру бака и экономичности.Я вижу 2 способа сделать это:
- Когда автомобиль добавляется или обновляется, рассчитайте количество КМ и сохраните его как статическое поле в базе данных.
- Каждый раз, когдадоступ к машине, рассчитать количество км на лету.
Поскольку экономия / размер бака не меняется (хотя его можно редактировать), КМ является довольно статической величиной.Я не понимаю, почему мы рассчитываем это каждый раз, когда к машине обращаются.Не тратит ли это время процессора в отличие от простого хранения его в отдельном поле в базе данных и вычисления только при добавлении или обновлении автомобиля?
Мой следующий пример, который является почти совершенно другим вопросом (нопо той же теме), относится к подсчету детей.
Допустим, у нас есть приложение, в котором есть категории и элементы.У нас есть представление, где мы отображаем все категории, и подсчет всех элементов в каждой категории.Опять же, мне интересно, что лучше.Чтобы выполнить запрос MySQL для подсчета всех элементов в каждой категории каждый раз при доступе к странице?Или хранить счет в поле в таблице категорий и обновлять при добавлении / удалении элемента?
Я знаю, что избыточно хранить все, что можно вычислить, но я беспокоюсь, что вычисление полей или подсчет записей можетбыть медленным, в отличие от хранения данных в поле.Если это не так, пожалуйста, дайте мне знать, я просто хочу узнать, когда использовать любой из этих методов.В небольшом масштабе, я думаю, это не имеет значения в любом случае, но такие приложения, как Facebook, будут ли они действительно подсчитывать количество ваших друзей каждый раз, когда кто-то просматривает ваш профиль, или они просто сохраняют его как поле?
Буду признателен за любые ответы на оба этих сценария и за любой ресурс, который может объяснить преимущества вычисления по сравнению с хранением.
Заранее спасибо,
Кристиан