Я хочу выполнить несколько простых вычислений, оставаясь независимым от базы данных в моем приложении rails.
У меня есть три модели:
.---------------. .--------------. .---------------.
| ImpactSummary |<------| ImpactReport |<----------| ImpactAuction |
`---------------'1 *`--------------'1 *`---------------'
В основном:
ImpactAuction
содержит данные о ... аукционах (цены, количество и т. Д.).
ImpactReport
содержит ежемесячные отчеты, которые имеют много аукционов, а также другие атрибуты; он также показывает некоторые результаты расчетов на основе аукционов.
ImpactSummary
содержит набор отчетов, а также некоторую информацию о конкретном году, а также показывает результаты расчетов на основе двух других моделей.
Что я собираюсь сделать, это сохранить результаты этих действительно простых вычислений (просто средства, суммы и т. П.) В соответствующих таблицах, чтобы их можно было быстро прочитать, и таким образом, чтобы я мог легко выполнить запросы по результатам расчета.
это хорошая практика для хранения результатов расчетов? Я уверен, что это не очень хорошая вещь, но приемлемо ли это?
это полезно, или я не должен беспокоиться и выполнять вычисления на лету?
Если это хорошая практика и полезно, как лучше достичь того, чего я хочу?
Это сложная часть. Сначала я реализовал простую цепочку обратных вызовов , которая обновляла бы поля вычисления родительской модели при сохранении (то есть, когда аукцион создается или обновляется, он помечает some_attribute_will_change!
в своем отчете и сохраняет его, что вызывает его собственные обратные вызовы и т. Д.).
Этот подход хорошо подходит при создании / обновлении одной записи, но если я хочу работать с несколькими записями, он будет запускать вычисления по всей цепочке для каждой записи ... Так что я вдруг обнаружил, что вынужден поставить условие на обратные вызовы ... в зависимости от того, есть ли у меня одна или несколько записей, которые я не могу понять, как (используя метод класса, который можно вызывать для отношения, используя атрибут экземпляра @skip_calculations
для каждой записи, просто используя outdated
поле для отметки родительских записей для последующего расчета?).
Любой совет приветствуется.
Бонусный вопрос: Считается ли это независимым от БД, если я реализую это с представлениями БД?