2

我有一个 ASP.Net 3.5 Web 应用程序。网站和 SQL-Server 都托管在same server.

整个系统以Numbers/Data为基础,用户需要将import海量数据(如使用excel电子表格)输入系统,系统需要显示计算出来的数字on screenreports为用户生成。

目前,在此服务器上运行一个 Import Server 应用程序,将数据插入/更新到raw data tables,然后计算数据并将其插入/更新到post-processed表中。所有这些过程都涉及one thread(可能在一个存储过程中)。

这种设计的缺点是:导入appcosts占用大量系统资源,需要一个long time运行。它locked是表格(例如 TRANSACTION)并影响了用户在网站上的操作。此外,计算出的数据难以追踪,容易误算。

我试图View在系统中创建一个临时表()来按需处理数据,而不是将其后处理到计算表中。但我发现处理时间(查看和 SQL 存储过程execution time)太长而无法接受(5 分钟或更长时间,某些查询,例如每天join...betweenapportion年度数据需要最多的处理时间)。

希望有经验的人能给我一些建议(或一般策略),关于如何在各个方面改进系统的设计/实现,谢谢。

所有方面包括:多服务器、DBMS、服务器应用程序、Web 服务、SQL Server 优化、SQL 组件、整个系统设计和架构等。

4

3 回答 3

1

所以如果我正确地阅读了这个问题,你曾经有这个:

  • 具有原始数据导入+后处理的系统。两组表。
  • Web 应用程序在性能方面受到影响,因为原始数据的后处理非常耗时,并且在 Web 应用程序读取数据的后处理表中引入了锁。

因此,您现在正在尝试以下设置:

  • 原始数据被导入一组表。
  • 您不是在后处理和存储处理后的数据,而是在视图中“按需”进行后处理。
  • 这也没有给出令人满意的表现

尝试使用原始设置的替代版本怎么样?您可以尝试这样的解决方案:

  • 制作组表
  • 一套用于原始数据导入
  • 一组用于存储原始数据后处理结果
  • 还有一组用于存储已处理数据的副本。

最后一组表格将用于生成报告。使用此设置,“数据导入”将包括三个步骤:

  • 原始数据导入
  • 后期处理
  • 将处理后的数据更新为“实时”表。

据推测,将处理后的数据从一组表复制到另一组表可以合理地执行。因此,数据导入对 Web 应用程序的影响可以得到控制,因为后处理不会直接接触“实时”表。

于 2012-07-12T20:53:42.850 回答
0

您可以尝试以下方式

1st直接将数据导入原始数据表。

然后在代码后面而不是在存储过程中进行计算,这需要大量时间在代码后面执行此操作将节省数据库资源。

完成计算后,将计算值插入计算表。

尽量使用后台代码而不是数据库,只有在后台代码无法完成某些事情时才使用数据库。

于 2012-07-06T13:32:59.020 回答
0

我看到加入需要一段时间你能确认你有外键吗?另外,如果您向我展示我可能会提供帮助的 SQL。

于 2012-07-06T14:46:23.070 回答