什么方法的数据验证最适合大型数据集

时间:2009-02-12 02:15:51

标签: .net database large-data-volumes

我有一个大型数据库,想要实现一个允许用户进行批量更新信息的功能。用户下载excel文件,进行更改,系统接受excel文件。

  1. 用户使用Web界面(ASP.NET)将数据从数据库下载到Excel。
  2. 用户修改Excel文件。只允许将某些数据修改为其他映射到数据库中。
  3. 一旦用户对他们的更改感到满意,他们就会通过ASP.NET界面上传更改后的Excel文件。
  4. 现在服务器的工作就是从Excel文件中吸取数据(使用Gembox)并根据数据库验证数据(这是我遇到麻烦的地方)
  5. 验证完成后,验证结果显示在另一个ASP.NET页面上。验证是软的,因此如果缺少索引到DB的映射,则很难发生。 (缺少数据导致忽略等)
  6. 用户可以决定所采取的操作是否合适,在接受这些操作时,系统将应用更改。 (添加,修改或忽略)
  7. 在应用用户所做的更改和/或添加之前,必须验证数据以避免用户犯错。 (意外删除的日期,他们并不意味着)

    对于需要更新以达到65k以上的行而言,这并不遥远。

    问题是:解析数据以进行验证以及构建更改和添加集的最佳方法是什么?

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

    帮助?

4 个答案:

答案 0 :(得分:3)

我过去看过的方法是:

  1. 将用户数据批量加载到数据库中的“临时”表中。
  2. 通过单个存储过程验证临时表中的数据(执行一系列查询),标记未通过验证的行,需要更新等。
  3. 根据需要对标记的行进行操作。
  4. 这适用于验证缺失的列,有效的键值等。检查单个字段的格式不太好(不要让SQL拉开字符串)。

    正如我们所知,有些人对将业务逻辑放入数据库感到不舒服,但这种方法确实限制了应用程序的数据库命中数,并避免一次将所有数据保存在内存中。

答案 1 :(得分:1)

您的问题在数据仓库系统中非常常见,批量上传和数据清理是(常规)工作的核心部分。我建议你谷歌围绕ETL(提取变换加载),临时表,你会发现很多好东西。

在广泛回答您的问题时,如果您“将数据加载到内存中”进行检查,则可以在您自己的代码中有效地重新实现数据库引擎的一部分。现在,如果这样做更快更聪明,那将是一件好事。例如,您的Excel提取可能只有一小部分有效日期,因此您无需加入表格来检查日期是否在范围内。但是,对于其他数据,如外键等,让DB做自己擅长的事情。

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

答案 2 :(得分:0)

要正确回答这一点,以下信息将非常有用

  1. 您如何通知用户失败?
  2. 一次验证失败会导致加载64,999条记录还是没有?

答案 3 :(得分:0)

首先使用批量上传从文本文件数据存储临时表。然后重新执行此操作,并使用您制作的界面进行验证。并在验证后将其存储在主表或DB