2009-02-12 78 views
1

我有一个大型数据库并希望实现一项功能,该功能允许用户对信息进行批量更新。用户下载一个excel文件,进行更改并且系统接受excel文件。什么数据验证方法最适合于大数据集

  1. 用户使用Web界面(ASP.NET)将数据从数据库下载到Excel。
  2. 用户修改Excel文件。只有某些数据被允许修改为其他地图到数据库中。
  3. 一旦用户满意他们的更改,他们就会通过ASP.NET界面上传更改后的Excel文件。
  4. 现在,服务器的工作是从Excel文件中吸取数据(使用Gembox)并根据数据库验证数据(这是我遇到麻烦的地方)
  5. 验证结果显示在另一个ASP.NET页面上验证完成后。验证是软的,很难失败只有发生时,说一个索引映射到数据库丢失。 (丢失的数据会导致忽略等)
  6. 用户可以决定将采取的操作是否合适,接受这些操作时系统将应用更改。 (添加,修改或忽略)

应用用户所做的改变和/或添加之前,必须将数据验证,以避免用户错误。 (意外删除的日期,他们并不是故意的)

对于需要更新的行数不能超过65k。

现在的问题是:解析数据进行验证并建立更改和添加集的最佳方法是什么?

如果我将excel数据必须验证的所有数据加载到内存中,我可能会不必要地影响已经存在内存的应用程序。如果我为excel文件中的每个元组执行数据库命中,我正在查看超过65k个数据库命中。

帮助?

+0

后过得好从Excel中的信息文件到数据库? OWC?数据导入工具?影响答案。 – jcollum 2009-02-12 02:18:28

+0

使用Gembox逐行读取数据。 – Llyle 2009-02-12 02:19:07

回答

3

我看得过去使用的方法是:

  1. 用户的数据批量加载到一个便条'数据库中的表。
  2. 通过单个存储过程(执行一系列查询)验证临时表中的数据,标记未通过验证的行,需要更新等。
  3. 根据需要对标记行进行操作。

这适用于验证缺少的列,有效的键值等。它不太适合检查单个字段的格式(不要使SQL拉字符串分开)。我们知道,有些民众觉得在数据库中放入业务逻辑会感到不舒服,但这种方法确实会限制应用程序的数据库命中数量,并且避免将所有数据一次性保存在内存中。

0

要正确地回答这个问题下面的信息是有用

  1. 你打算怎样通知故障的用户?
  2. 将有一个验证失败导致加载64,999条记录或无?
+0

1.通过ASP.NET GUI。 2.软失败。 1验证失败意味着65k-1成功。 – Llyle 2009-02-12 02:31:59

1

你的问题是数据仓库系统,其中批量上传和数据清理是(常规)工作的核心部分做很常见的。我建议你围绕ETL(Extract Transform Load),Staging Tables进行谷歌搜索,你会发现很多好东西。

广义回答你的问题,如果你做“加载数据到内存”检查,你就有效地重新实现DB引擎在自己的代码的一部分。如果这样做更快更聪明,现在可能是件好事。例如,您的Excel提取可能只有一小段有效日期,因此您无需加入表格即可检查日期是否在范围内。然而,对于像外键等其他数据,让数据库做它擅长的。

使用临时表/数据库/服务器是一个常见的解决方案的数据量得到很大。 BTW允许用户在Excel中清理数据是一个非常好的主意,允许他们'意外'删除关键数据是一个非常糟糕的主意。你可以锁定单元格/列来防止这种情况,和/或将一些基本的验证放入Excel中。如果一个字段应该填写并且应该是一个日期,那么可以在几行excel中检查。您的用户会很高兴,因为他们在发现问题之前不必上传。在从使用批量上载的文本文件的数据的临时表

0

第一存储。然后回顾一下,并使用您制作的界面进行验证。和验证其存储在主表或数据库

相关问题