Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过集合或SQLite计算报表数据-C#_C#_Sqlite_Report - Fatal编程技术网

通过集合或SQLite计算报表数据-C#

通过集合或SQLite计算报表数据-C#,c#,sqlite,report,C#,Sqlite,Report,我目前正在为存储在MSSQL数据库中的数据开发一个报告工具。 数据库是巨大的,因为它是一个生产数据库,我不是它的所有者,所以我不能扩展任何功能(添加表/函数等) 为了获得报告编号,我需要使用昂贵的查询(游标),同时我不想给数据库造成不必要的压力。这也是相当复杂的事情,比如分析库存的变动和使用,而不仅仅是简单的总数和计数 因此,我目前的方法是使用单个查询以小块的形式加载数据,将它们加载到集合中,然后运行几个foreach迭代来计算报告的数据。 基本上我是在内存中重建数据库,然后计算 我现在有很多代

我目前正在为存储在MSSQL数据库中的数据开发一个报告工具。 数据库是巨大的,因为它是一个生产数据库,我不是它的所有者,所以我不能扩展任何功能(添加表/函数等)

为了获得报告编号,我需要使用昂贵的查询(游标),同时我不想给数据库造成不必要的压力。这也是相当复杂的事情,比如分析库存的变动和使用,而不仅仅是简单的总数和计数

因此,我目前的方法是使用单个查询以小块的形式加载数据,将它们加载到集合中,然后运行几个foreach迭代来计算报告的数据。 基本上我是在内存中重建数据库,然后计算

我现在有很多代码(以及数据库中实体的对象)在那里,我开始认为通过一个单独的SQLLite数据库创建必要数据的本地简化副本可能是一个更好的解决方案

我也考虑了linq到对象,但本质上我仍然需要创建和填充对象。。。 DB甚至可以为新报告创建新查询,而不是硬编码。 另一方面,它可能比在集合中执行所有操作要慢

因此,问题(最后):
您认为,手动将简化版和精简版的数据复制到本地数据库会更好,还是使用其他解决方案更好?

如果您的查询确实非常昂贵,那么您最好的选择是将它们加载到本地数据库中并在那里进行处理。我建议您使用SQL Server Express Edition,因为您可以利用t-SQL ()


至于加载数据,您可以使用您的查询、BCP、DTS包或大约50个其他选项。

如果您的查询确实非常昂贵,那么您最好的选择是将它们加载到本地数据库中并在那里进行处理。我建议您使用SQL Server Express Edition,因为您可以利用t-SQL ()


至于加载数据,您可以使用您的查询、BCP、DTS包或大约50个其他选项。

通常可以拍摄产品数据库的快照,并将其复制到另一个数据库中,您可以在其中执行报告查询。这样,您就不会向Prod DB添加更多负载。有几种方法可以做到这一点。硬件级复制(通常最快)、软件级复制(可能很昂贵)、使用视图、计划作业,这些作业将使用Prod的实时数据填充本地数据库。由于连接和数据量巨大,一些报告分析将根据您的数据模型花费数分钟到数小时的时间。因此,建议在单独的非生产数据库上进行报告。

通常可以拍摄产品数据库的快照,并将其复制到另一个数据库,在该数据库上可以执行报告查询。这样,您就不会向Prod DB添加更多负载。有几种方法可以做到这一点。硬件级复制(通常最快)、软件级复制(可能很昂贵)、使用视图、计划作业,这些作业将使用Prod的实时数据填充本地数据库。由于连接和数据量巨大,一些报告分析将根据您的数据模型花费数分钟到数小时的时间。因此,建议在单独的非生产数据库上进行报告。

问题:您能提供更多关于“巨大”的信息吗?您实际需要查询多少表/记录?什么是源数据库管理系统?它是否运行在与您正在编写的应用程序代码不同的机器上?您是否有证据表明运行数据库的服务器无法承受报告的性能影响?您是否100%确定没有游标就无法完成所需的操作?我这样问是因为根据我的经验,报告输出很少需要游标。如果构造正确,SQL查询的功能会非常强大,而且RDBMS优化器在有效利用CPU周期方面几乎总是比您自己复制数据和处理数据做得更好。根据这一想法,如果您必须从RDBMS卸载数据,并且如果数据量真的很大,我建议使用您提供的本地数据库,而不是自己管理存储。问题:您能提供更多关于“巨大”的信息吗?您实际需要查询多少表/记录?什么是源数据库管理系统?它是否运行在与您正在编写的应用程序代码不同的机器上?您是否有证据表明运行数据库的服务器无法承受报告的性能影响?您是否100%确定没有游标就无法完成所需的操作?我这样问是因为根据我的经验,报告输出很少需要游标。如果构造正确,SQL查询的功能会非常强大,而且RDBMS优化器在有效利用CPU周期方面几乎总是比您自己复制数据和处理数据做得更好。根据这一想法,如果您必须从RDBMS卸载数据,并且如果数据量真的很大,我建议使用您提供的本地数据库,而不是自己管理存储。