关于数据导入,后处理和数据存在。系统过程改进

时间:2012-07-03 10:37:45

标签: asp.net .net sql-server performance import

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

整个系统基于数字/数据,用户需要import海量数据到系统(例如使用excel电子表格),系统需要显示计算的数字on screen以及生成用户reports

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

此设计的缺点是:导入应用costs需要大量系统资源并运行long time。它locked表(例如TRANSACTION)和受影响的用户在网站上的操作。此外,计算的数据很难被跟踪并且容易被误算。

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

希望一些有经验的人能够就如何在各个方面改进系统的设计/实施提出一些建议(或一般策略),谢谢。

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

3 个答案:

答案 0 :(得分:1)

因此,如果我正确地阅读了这个问题,你曾经有过:

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

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

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

如何尝试原始设置的替代版本?您可以尝试这样的解决方案:

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

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

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

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

答案 1 :(得分:0)

您可以尝试以下方式

首先直接将数据导入原始数据表。

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

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

尝试尽可能多地使用后面的代码而不是数据库,只有在代码隐藏中无法完成某些事情时才使用数据库。

答案 2 :(得分:0)

我看到连接需要一段时间才能确认您是否有外键。另外,如果你向我展示我可以提供帮助的SQL。