我有一个大型数据库,想要实现一个允许用户进行批量更新信息的功能。用户下载excel文件,进行更改,系统接受excel文件。
在应用用户所做的更改和/或添加之前,必须验证数据以避免用户犯错。 (意外删除的日期,他们并不意味着)
对于需要更新以达到65k以上的行而言,这并不遥远。
问题是:解析数据以进行验证以及构建更改和添加集的最佳方法是什么?
如果我将所有必须验证excel数据的数据加载到内存中,我可能会不必要地影响已经占用内存的应用程序。如果我为excel文件中的每个元组执行数据库命中,我正在查看超过65k的数据库命中。
帮助?
答案 0 :(得分:3)
我过去看过的方法是:
这适用于验证缺失的列,有效的键值等。检查单个字段的格式不太好(不要让SQL拉开字符串)。
正如我们所知,有些人对将业务逻辑放入数据库感到不舒服,但这种方法确实限制了应用程序的数据库命中数,并避免一次将所有数据保存在内存中。
答案 1 :(得分:1)
您的问题在数据仓库系统中非常常见,批量上传和数据清理是(常规)工作的核心部分。我建议你谷歌围绕ETL(提取变换加载),临时表,你会发现很多好东西。
在广泛回答您的问题时,如果您“将数据加载到内存中”进行检查,则可以在您自己的代码中有效地重新实现数据库引擎的一部分。现在,如果这样做更快更聪明,那将是一件好事。例如,您的Excel提取可能只有一小部分有效日期,因此您无需加入表格来检查日期是否在范围内。但是,对于其他数据,如外键等,让DB做自己擅长的事情。
使用临时表/数据库/服务器是一种常见的解决方案,因为数据量会变大。 BTW允许用户清理Excel中的数据是一个非常好的主意,允许他们“意外”删除关键数据是一个非常糟糕的主意。你可以锁定单元格/列以防止这种情况,和/或在Excel中进行一些基本验证。如果一个字段应该填写并且应该是一个日期,你可以在几行excel中检查。您的用户会很高兴,因为他们在发现问题之前无需上传。
答案 2 :(得分:0)
要正确回答这一点,以下信息将非常有用
答案 3 :(得分:0)
首先使用批量上传从文本文件数据存储临时表。然后重新执行此操作,并使用您制作的界面进行验证。并在验证后将其存储在主表或DB
中