Java 将大型XML行与数据库表记录进行比较-自定义要求 问题
我们有一个类似XML(它有一些需要过滤的非unicode)的数据 更多信息Java 将大型XML行与数据库表记录进行比较-自定义要求 问题,java,database,xml-parsing,compare,stax,Java,Database,Xml Parsing,Compare,Stax,我们有一个类似XML(它有一些需要过滤的非unicode)的数据 更多信息 XML文件超过9 Gig,可通过FTP获得 数据库表列名可能不同于XML列标记名 可能需要添加/定义一些规则来筛选行 问题: 解析这个巨大的XML并找出数据库表中是否存在该记录的合适方法是什么?有可用的开源工具吗 我在尝试什么 使用带有无效字符fiter(FilterReader)的默认实现(XMLInputFactory)编写了StAX解析器 计划将XML拆分为块 让并发线程处理每个块 每个线程都将生成一个查询,以检
- 使用带有无效字符fiter(FilterReader)的默认实现(XMLInputFactory)编写了StAX解析器
- 计划将XML拆分为块
- 让并发线程处理每个块
- 每个线程都将生成一个查询,以检查数据库中是否存在该查询(我知道它的荒谬之处)
- 创建一个连接池,并由每个线程执行这些查询
像这样的建议对我很有帮助。是的。我认为你使用StAX是对的。您肯定想要流式传输,而StAX似乎有最简单的用于流式传输XML的API。我不会马上去ORM。大多数ORM都支持往返数据。这样可以节省进行机械变换的工作。当您拥有非常结构化的数据,但两个模式之间的映射并不十分复杂时,这就很好了。这里您正在尝试将数据从一种格式导入到另一种格式。听起来您的大型数据集有一个相当简单的模式,但映射是更复杂的部分。使用自定义代码。Pawel关于临时桌子的建议听起来不错。尝试在同时对整个数据集(旧数据集和导入数据集)进行操作的存储过程中尽可能多地进行处理。您不想一直将这些行从数据库来回传输到应用程序。是的。我认为你使用StAX是对的。您肯定想要流式传输,而StAX似乎有最简单的用于流式传输XML的API。我不会马上去ORM。大多数ORM都支持往返数据。这样可以节省进行机械变换的工作。当您拥有非常结构化的数据,但两个模式之间的映射并不十分复杂时,这就很好了。这里您正在尝试将数据从一种格式导入到另一种格式。听起来您的大型数据集有一个相当简单的模式,但映射是更复杂的部分。使用自定义代码。Pawel关于临时桌子的建议听起来不错。尝试在同时对整个数据集(旧数据集和导入数据集)进行操作的存储过程中尽可能多地进行处理。您不想一直将这些行从数据库来回传输到应用程序。您可以尝试apache digester:您可以编写自己的类并将其推送到digester堆栈上。然后,根据regex规则(您指定),digester将使用标记及其值作为参数调用此对象上的不同方法。在那里,您可以将它们映射到数据库表,甚至可以将它们插入到数据库中。digester使用SAX,因此它应该能够处理这个巨大的文件,但是您可能需要比来自稍微不同的世界(.NET)的我更多的内存,在我的世界中,我将执行以下操作。我将使用XmlReader(以避免将文档加载到内存中)读取文件,然后以可以导入数据库的形式编写另一个文件。我将使用SqlServer中的bulkInsert之类的工具/命令将数据导入临时表/数据库。我将运行SQL查询来比较这两个表/数据库。另外,如何定义数据库中是否存在记录?所有列都必须匹配还是只匹配键?如果某个键匹配,但某些列不匹配怎么办?我认为ORM在这种情况下不会有帮助。您可以尝试apache digester:您可以编写自己的类并将其推送到digester堆栈上。然后,根据regex规则(您指定),digester将使用标记及其值作为参数调用此对象上的不同方法。在那里,您可以将它们映射到数据库表,甚至可以将它们插入到数据库中。digester使用SAX,因此它应该能够处理这个巨大的文件,但是您可能需要比来自稍微不同的世界(.NET)的我更多的内存,在我的世界中,我将执行以下操作。我将使用XmlReader(以避免将文档加载到内存中)读取文件,然后以可以导入数据库的形式编写另一个文件。我将使用SqlServer中的bulkInsert之类的工具/命令将数据导入临时表/数据库。我将运行SQL查询来比较这两个表/数据库。另外,如何定义数据库中是否存在记录?所有列都必须匹配还是只匹配键?如果某个键匹配,但某些列不匹配怎么办?我认为ORM在这种情况下不会有帮助。
<row><div>1234</div><dept>ABCD</dept></row>
<row><div>5678</div><dept>EFGH</dept></row>
div_c qdept
1234 ABCD
5678 EFGH