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