Самый быстрый способ запросить базу данных SQL из Excel? - PullRequest
0 голосов
/ 01 ноября 2011

Я буду строить небольшое добавление из Excel, которое позволит чтобы позволить пользователю выполнять специальные отчеты из Excel.

очевидный путь - через оператор SQL для источника данных ODBC, но я боюсь, что это не очень хорошо масштабируется для огромной таблицы (то есть: выполнение СУММЫ или СЧЕТА для таблицы, содержащей 50 гига данных, приведет к снижению производительности)

Я думал о том, чтобы использовать какую-то технику кеширования и в основном делать запросы в RAM данные: http://www.yellowfinbi.com/wp_inmemory.pdf Это может быть дорогостоящим в ОЗУ, и я не слишком уверен, насколько сложно это реализовать.

Мои ограничения следующие:

  • Я должен иметь возможность запрашивать любой тип источника данных (SQL Server, MySql) из Excel

  • Специальная отчетность будет выполняться из Excel (через мою надстройку)

  • Результат запроса должен быть отправлен обратно в ячейки Excel как можно быстрее

  • Я не хочу создавать кубы Datawarehouse или Olap, но запрашиваю источник данных

Какие-либо предложения по алгоритмам, методам реализации (отчеты In-Ram?), Чтобы иметь наиболее оптимизированный способ выполнения специальных запросов из Excel? (кроме оптимизированного кода SQL!)

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

PowerPivot - это одна из опций, которая представляет собой бесплатную надстройку для Excel, оптимизированную для агрегирования (суммирования / подсчета) данных подобным образом.

Требуется достаточно оперативной памяти для кэширования данных с сервера.

1 голос
/ 01 ноября 2011

"(то есть: выполнение СУММЫ или СЧЕТА для таблицы, содержащей 50 гигабайт данных, приведет к снижению производительности)"

Именно поэтому вы, вероятно, не хотите кэшировать данные вклиент.Если у каждого пользователя нет своего небольшого суперкомпьютера с 64 ГБ ОЗУ, вам нужно уменьшить количество встречающихся строк.

Дело в том, что большинство пользователей считают большой отчет довольно бесполезным.Наш мозг может хранить только менее десятка значений в краткосрочной памяти.Таким образом, пользователь не сможет извлечь что-либо полезное из огромного количества данных.

Они должны выполнять анализ, и обычно анализ включает агрегированные или отфильтрованные данные .

Два варианта, которые можно использовать как в комбинированном, так и в комбинированном режиме:

1) Реализуйте представления, которые предварительно агрегируют данные.Многие механизмы БД имеют что-то вроде материализованных представлений или опцию «без расширения» в SQL-сервере, что в основном позволяет вам предварительно объединять отчеты. Если вы пытаетесь избежать этого и позволяете надстройке справиться с этим, тогда вы в основном создаете движок OLAP и должны посмотреть на алгоритмы, используемые системами OLAP (это именно то, чем PowerPivot уже является).

Идея состоит в том, что вы позволяете механизму БД делать то, что у него хорошо, сокращая количество строк до совокупного количества, которое ближе к тому, что нужно клиенту.Это гарантирует, что вы не отправляете огромный объем данных по сети и требует от клиента обработки этих данных и кэша в оперативной памяти.

2) Передайте критерии фильтрации с критериями WHERE / параметрами SP, чтобы уменьшить количествоиз строк возвращаются только те, которые абсолютно необходимы.Здесь есть место, чтобы стать действительно креативным, больше, чем думает большинство людей.Например, возможно, ваша таблица содержит некоторые данные, к которым у пользователя не будет доступа, поэтому имеет смысл объединиться с таблицей авторизации (или любым другим механизмом, который вы используете для управления доступом) и отфильтровать любые данные, к которым у него нет доступа.

Требуется, чтобы пользователь выбирал фильтры для фильтрации данных в разумных пределах.

Это обычное явление, когда пользователю требуется больше данных, чем они могут проглотить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...