Расчет данных отчета - C # с помощью коллекций или SQLite - PullRequest
1 голос
/ 10 июня 2011

В настоящее время я работаю над инструментом отчетности для данных, которые хранятся в базе данных MSSQL.База данных огромна, и поскольку она является производственной базой данных, и я не являюсь ее владельцем, я не могу расширять какие-либо функции (добавлять таблицы / функции и т. Д.).

Чтобы получить номера отчетов, я быМне нужно использовать дорогие запросы (курсоры) и в то же время я не хочу вызывать ненужную нагрузку на БД.Это также довольно сложные вещи, такие как анализ движения и использования инвентаря, а не просто сумма и количество.

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

В настоящее время у меня достаточно много кода (и объектов для сущностей в БД), и я начинаю думать, чтовозможно, было бы лучшим решением создать локальную упрощенную копию необходимых данных, например, с помощью отдельной SQLLite-DB.

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

Итак, вопрос (наконец): Как вы думаете, было бы лучше вручную скопировать упрощенную и сокращенную версиюданные в локальную базу данных или вы пошли бы с другими решениями?

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Обычно допустимо делать снимки вашей Prod DB и копировать их в другую БД, где вы можете выполнять запросы отчетов.Таким образом, вы не будете добавлять больше нагрузки в Prod DB.Есть несколько способов сделать это.Репликация на аппаратном уровне (обычно самая быстрая), репликация на программном уровне (может быть дорогостоящей) с использованием представлений, запланированных заданий, которые будут заполнять вашу локальную БД живыми данными из Prod.Некоторый анализ отчетов может занять от нескольких минут до нескольких часов в зависимости от вашей модели данных из-за объединений и большого количества данных.Поэтому отчетность рекомендуется составлять на отдельной непроизводственной БД.

2 голосов
/ 10 июня 2011

Если ваши запросы действительно такие дорогие, тогда лучше всего загрузить их в локальную базу данных и выполнить там обработку.Я бы предложил SQL Server Express Edition, так как вы сможете воспользоваться t-sql ( link ).

Что касается загрузки данных, вы можете использовать свои запросы, BCP, Пакеты DTS или около 50 других вариантов.

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