使用Java并行地将巨大的XML数据加载到SQL Server

时间:2014-08-04 16:29:34

标签: sql-server xml

我想将带有XML数据的大文件加载到SQL Server 2008中。在加载每条记录之前,我需要使用来自数据库中不同表的现有数据来验证它的一些字段。 (例如,如果我将带有userid和帐户详细信息的数据加载到“user_account”表中,我需要检查userid是否存在于数据库的“user”表中)

我正在使用Java。我计划将XML文件分成小文件,并使用不同的线程运行并行加载。我正在日志文件中记录加载错误。我可以使用同步来避免日志文件一致性问题。

我想知道我的方法是否正确。如果有任何其他方法可以帮助我更快/更有效地执行加载,请告诉我。

1 个答案:

答案 0 :(得分:1)

检查记录是否在SQL Server外部的数据库中是非常耗时的,而不是直接在SQL Server中执行。 作为替代方案,您可以执行以下操作:

  • 以块的形式分割XML文件。例如大约10MB的块。确保XML块仍符合XML架构。
  • 然后将块插入导入表
  • 启动一个存储过程,该过程从导入表中获取所有新的XML块并使用MERGE语句进行比较

这样做的好处是,

  • 它比在java中的记录级别上快得多。
  • 与完整的XML(例如1 GB或更大版本)相比,解析XML时,块中的SQL内存不会消耗太多内存

如果您可以定义XML,我建议使用尽可能短的元素名称和属性名称,因为这样也可以在SQL服务器中节省大量内存用于解析