Действительно зависит от характера данных и от того, как рассчитывается статистика, в любом случае вам нужно сделать две вещи:
(a) вызывает событие, когда какие-либо новые данные добавляются или удаляются
(b) Не пересчитывать, это может быть очень дорого, вместо этого делать только частичные вычисления, вычисляя разницу между старыми данными и новыми данными.
Вот глупый пример:
Запись A = 2
Запись B = 1
Запись C = 1
Запись D = 5
теперь предположим, что ваша панель инструментов вычисляет среднее значение, в этом простом примере мы будем хранить (возможно, в той же базе данных) некоторые результаты частичных вычислений: например, -
NumRecords = 4
RecSum = 9
Mean = [RecSum]/[NumRecords]
Таким образом, при изменении данных можно сделать только три вещи (для каждой транзакции):
запись удалена (случай 1), запись добавлена (случай 2), запись изменена (случай 3):
вариант 1 (запись А удалена), таким образом:
NumRecords-1> 3
RecSum- {Запись значения}> 9-2 = 7
Среднее = [7] / [3]
И вы можете делать аналогичные «частичные» вычисления для других случаев, идея состоит в том, что вы не выбрасываете свое последнее решение и рассчитываете различия. конечно, для более сложной статистики это будет более сложным.
Но, как вы можете видеть, если вы представите, что у вас миллион записей, то нет необходимости извлекать все эти записи снова, чтобы полностью пересчитать, что позволило бы им быть "в реальном времени"