计算报表数据-C#通过Collections或SQLite
本文关键字:Collections SQLite 通过 -C# 报表 数据 计算 | 更新日期: 2023-09-27 17:58:56
我目前正在为存储在MSSQL数据库中的数据开发报告工具。这个数据库很大,因为它是一个生产数据库,我不是它的所有者,所以我不能扩展任何功能(添加表/函数等等)。
为了获得我的报告编号,我需要使用昂贵的查询(游标),同时我不想给数据库带来不必要的压力。它也是相当复杂的东西,比如分析库存的移动和使用情况,而不仅仅是简单的总和和计数。
因此,我目前的方法是使用单个查询将数据加载成小块,将它们加载到Collections中,然后运行几个foreach迭代来计算报告的数据。基本上,我在内存中重建数据库,然后计算数据库。
我目前有很多代码(以及数据库中实体的对象),我开始认为,通过单独的SQLLite数据库创建必要数据的本地简化副本可能是一个更好的解决方案。
我也考虑过linq到对象,但本质上我仍然需要创建和填充对象。。。DB甚至可以为新报告创建新的查询,而不是对它们进行硬编码。另一方面,它可能比在Collections中执行所有操作要慢。。。
因此,问题(最后)是:您认为,手动将简化和缩减版本的数据复制到本地数据库更好吗?还是使用其他解决方案?
如果查询真的那么昂贵,那么最好的选择是将它们加载到本地数据库中并在那里进行处理。我建议您使用SQL Server Express Edition,因为您将能够利用t-SQL(链接)。
至于加载数据,您可以使用查询、BCP、DTS包或大约50个其他选项。
通常可以拍摄Prod数据库的快照,并将其复制到另一个可以执行报告查询的数据库中。这样,您就不会向Prod数据库添加更多负载。有几种方法可以做到这一点。硬件级复制(通常速度最快)、软件级复制(可能很昂贵)、使用视图、计划作业,这些作业将用Prod的实时数据填充本地数据库。由于联接和数据量巨大,根据您的数据模型,一些报告分析可能需要几分钟到几个小时。因此,建议在单独的非生产数据库上进行报告。