ASP.NET: стратегия для обработки действительно больших отчетов - PullRequest
4 голосов
/ 10 ноября 2009

Может быть, не только для отчетов, но все же ...

В моем веб-приложении asp.net mvc есть раздел для отчетов, которые показывают 5 столбцов данных, которые почти напрямую отображаются в таблицу в БД.

Проблема в том, что в некоторых случаях длина этого отчета может превышать 40000 записей (я знаю, что никто не может обработать 40000 записей данных, но отчет такой, какой он есть), и, как вы можете ожидать, он истекает выдает ошибку.

Вопрос в том, что является хорошим способом для обработки и доставки отчета такого размера? Я думал о создании небольшого небольшого консольного приложения, которое бы создавало отчет за пределами веб-сервера, но я немного растерялся, в каком направлении смотреть?

Ответы [ 5 ]

6 голосов
/ 10 ноября 2009

Нужны ли в отчете самые последние данные? Если нет, вы можете посмотреть на создание отчета в формате PDF ночью (или когда ваш сервер не занят) и просто предоставить ссылку на PDF. Запланированная задача, которая запускает консольное приложение, как вы предложили, может создать отчет и вывести его в файл. Многие инструменты отчетности, такие как Crystal Reports, позволят вам экспортировать отчет в PDF или электронную таблицу Excel. В этом случае вы можете сгенерировать отчет на совершенно другом компьютере и затем скопировать его на веб-сервер. Это может позволить вам обновлять отчет каждый час (или что-то еще) без такой нагрузки на ваш веб-сервер.

3 голосов
/ 10 ноября 2009

Создание отчета в ожидании пользователя, вероятно, не очень хорошая идея (не говоря уже о тайм-аутах SQL / IIS и т. Д.)

Вы можете получить запрос пользователя на отчет, а затем попросить службу Windows подобрать эти запросы, сгенерировать отчет и отправить электронное письмо пользователю? (или на сайте есть какой-нибудь скрипт опроса ajax для уведомления пользователей о готовности их отчетов?)

Вы можете распространить это на планирование одного и того же отчета с повторяющимися интервалами и т. Д.

2 голосов
/ 10 ноября 2009

Я бы посмотрел в службы отчетов SQL (при условии, что это работает на SQL Server). Существует несколько вариантов доставки, которые могут лучше соответствовать потребностям вашего приложения (например, вы можете запланировать, чтобы документ PDF или Excel отображался в чьем-либо почтовом ящике каждую ночь).

Есть также отличная статья от команды StackOverflow, которая позволяет фоновые процессы в ASP.NET, если вы можете просто генерировать этот отчет чаще, чем по запросу (может быть, каждые 5-10 минут?)

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

0 голосов
/ 10 ноября 2009

Сомнительно, чтобы пользователь когда-либо просматривал весь отчет из 40 000 строк. Так почему бы не показать только 1000 самых популярных строк, упорядоченных в обратном порядке? Если вы используете решение для составления отчетов, которое поддерживает отчеты по требованию, вы всегда можете перейти ко второму отчету, который показывает следующие 1000 самых текущих строк. Просто мысль ...

0 голосов
/ 10 ноября 2009

Другое частое использование, которое я видел для обработки крупномасштабных отчетов, - это настройка службы Windows, которая выполняет физическую генерацию отчета, который выгружает заполненный двоичный файл в базу данных или хранилище файлов, а затем обновляет данные, чтобы показать, что отчет вместе с информацией, необходимой для приложения, чтобы связать завершенный отчет.

Затем вы можете заставить свою кнопку do report запускать запрос на инициирование отчета, а затем перемещать их на страницу отчета по обработке, где перечислены все отчеты, помещенные в очередь для них.

...