批量操作在线网络应用程序

时间:2009-10-04 12:48:56

标签: asp.net sql-server

客户拥有基于Web的库存管理系统。该系统是专有且复杂的。它在数据库中有大约100个表,它们之间有复杂的关系。它有~1500000件物品。

客户正在对他的流程进行一些重组,现在需要对数据进行大量更新和操作(只有数据更改,没有结构更改)。在线屏幕不允许这样的工作,因为它们是在开始时设计的,没有这个要求。 该数据库是MS Sql 2005,该应用程序是在IIS上运行的asp.net。

一个解决方案是为他构建新的屏幕,他可以在网格中查看数据并在大量记录上完成所需的工作。这将允许我们使用已经存在的处理单个项目的函数(我们只需要实现一个循环)。此时,客户意识到他想要做的两种大规模操作,但是会说还有其他操作。每次我们有请求时,这都需要设计,编码和测试。

然而,由于一些监管要求,客户的需求很紧迫,所以我想知道在MSSQL和Excel或Access之间使用某种映射以暴露所需信息是否更有效。在Excel或Access中进行更改,然后保存在数据库中。可能正在使用SSIS来做到这一点。 我不熟悉SSIS或其他做这些事情的技术,这就是为什么我无法判断第二种解决方案是否确实有效且优于第一种解决方案。当然第二种解决方案需要一些工作和测试,但它会更快,更便宜吗?

另一个问题是有没有其他方法可以做到这一点?

任何想法都将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

我怀疑Excel能否处理1.5mil元素/行。

当您说要在网格中显示数据时 - 您的客户将如何进行更改?手动还是背后有一些自动化?我强烈建议自动化(因为你现在只知道两种类型的变化)。也许即使是一个简单的独立“转换器”应用程序 - 也不会成为主程序的一部分 - 将来在数据库表中直接手动编辑数据将太诱人。

答案 1 :(得分:0)

无论哪种方式,您都需要进行测试。

假设您将40000个产品导出到Excel,他会重新组织它们,然后将它们带回到临时表中并将更改应用到SQL表中。由于Excel基本上是一个自由形式系统,如果他引入无效情况会发生什么?您的更新需要检测它,失败并回滚或以某种指定的方式处理它。

无论如何,你的建议都可以使用。

就个人而言,对于像这样的大型更改,我更愿意让有经验的数据库开发人员在直接SQL(硬编码或表驱动)中开发更改,在测试环境中对生产数据进行测试(之前进行表格比较)之后)并将相同的脚本部署到生产中。这也允许使用现有的存储过程(您正在使用SP,强制实现这个复杂数据库的一致接口,对吧?),这样就可以简单地重用已经存在的基本数据库逻辑。

答案 2 :(得分:0)

我认为这是一种策略,可以在最短的时间内从A到B。

  

一个解决方案是为他建立新的   屏幕,他可以访问   网格中的数据并完成所需的工作   在大量的记录上。

在主系统中构建一个只使用一次或两次的接口并不是一个好主意。它需要额外的时间,你可能会花更多的时间来维护它而不是使用它。

  

这将允许我们使用已经   处理的现有功能   单品(我们只需要   实现一个循环)

在.NET应用程序中将您自己糟糕的小界面混合在一起,其唯一目的是完成这一任务。将它保存在“我以后可能使用的东西”文件夹中。

由于您正在处理如此大量的数据,请确保您没有从远程位置运行您的应用。

获取SQL 2005的副本并将其安装在虚拟化层上。将生产数据库复制到此虚拟化SQL Server。 在开始测试之前快速拍摄虚拟副本。根据此虚拟副本编写和测试您的应用。每次测试时都回滚到原始快照。不断更改代码,测试和回滚,直到您的应用程序可以完美地执行所需的更改。

然后,当您需要更改生产数据库时,您可以在应用程序执行所有更改时高枕无忧。由于该过程可能需要一段时间,因此请添加一些日志记录,以便在运行时检查状态。

哦,是的,请确保在运行大更新之前有新的备份。