"(то есть: выполнение СУММЫ или СЧЕТА для таблицы, содержащей 50 гигабайт данных, приведет к снижению производительности)"
Именно поэтому вы, вероятно, не хотите кэшировать данные вклиент.Если у каждого пользователя нет своего небольшого суперкомпьютера с 64 ГБ ОЗУ, вам нужно уменьшить количество встречающихся строк.
Дело в том, что большинство пользователей считают большой отчет довольно бесполезным.Наш мозг может хранить только менее десятка значений в краткосрочной памяти.Таким образом, пользователь не сможет извлечь что-либо полезное из огромного количества данных.
Они должны выполнять анализ, и обычно анализ включает агрегированные или отфильтрованные данные .
Два варианта, которые можно использовать как в комбинированном, так и в комбинированном режиме:
1) Реализуйте представления, которые предварительно агрегируют данные.Многие механизмы БД имеют что-то вроде материализованных представлений или опцию «без расширения» в SQL-сервере, что в основном позволяет вам предварительно объединять отчеты. Если вы пытаетесь избежать этого и позволяете надстройке справиться с этим, тогда вы в основном создаете движок OLAP и должны посмотреть на алгоритмы, используемые системами OLAP (это именно то, чем PowerPivot уже является).
Идея состоит в том, что вы позволяете механизму БД делать то, что у него хорошо, сокращая количество строк до совокупного количества, которое ближе к тому, что нужно клиенту.Это гарантирует, что вы не отправляете огромный объем данных по сети и требует от клиента обработки этих данных и кэша в оперативной памяти.
2) Передайте критерии фильтрации с критериями WHERE / параметрами SP, чтобы уменьшить количествоиз строк возвращаются только те, которые абсолютно необходимы.Здесь есть место, чтобы стать действительно креативным, больше, чем думает большинство людей.Например, возможно, ваша таблица содержит некоторые данные, к которым у пользователя не будет доступа, поэтому имеет смысл объединиться с таблицей авторизации (или любым другим механизмом, который вы используете для управления доступом) и отфильтровать любые данные, к которым у него нет доступа.
Требуется, чтобы пользователь выбирал фильтры для фильтрации данных в разумных пределах.
Это обычное явление, когда пользователю требуется больше данных, чем они могут проглотить.