我有一个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...between
或apportion
年度数据每天需要大部分处理时间)。
希望一些有经验的人能够就如何在各个方面改进系统的设计/实施提出一些建议(或一般策略),谢谢。
所有方面包括:多服务器,DBMS,服务器应用程序,Web服务,SQL Server优化,SQL组件,整个系统设计和体系结构等。
答案 0 :(得分:1)
因此,如果我正确地阅读了这个问题,你曾经有过:
因此,您正在尝试使用以下设置:
如何尝试原始设置的替代版本?您可以尝试这样的解决方案:
最后一组表格将用于生成报告。使用此设置,“数据导入”将包含三个步骤:
据推测,将处理后的数据从一组表复制到另一组表可以合理地执行。因此,数据导入对Web应用程序的影响可以得到控制,因为后期处理不会直接触及“实时”表。
答案 1 :(得分:0)
您可以尝试以下方式
首先直接将数据导入原始数据表。
然后在代码后面进行计算而不是在存储过程中进行计算,这需要花费大量时间在后面的代码中执行此操作将保存数据库资源。
完成计算后,将计算出的值插入计算表中。
尝试尽可能多地使用后面的代码而不是数据库,只有在代码隐藏中无法完成某些事情时才使用数据库。
答案 2 :(得分:0)
我看到连接需要一段时间才能确认您是否有外键。另外,如果你向我展示我可以提供帮助的SQL。