使用大量数据处理XML文件

时间:2010-03-19 21:08:04

标签: java xml

我正在开发一个低于要求的应用程序 -

  1. 从服务器下载ZIP文件。
  2. 解压缩ZIP文件,从此文件中获取内容(格式为XML)为字符串。
  3. 将此内容传递给另一种解析和进一步处理的方法。
  4. 现在,我担心的是XML文件可能是大小的,比如'100MB',而我的JVM只有512 MB的内存,所以如何将这些内容放入Chunks并传递给Parsing然后插入数据到PL / SQL表中。

    由于可以同时运行多个请求并考虑512MB内存,因此处理此问题的可能性最大。

    如何将数据导入Chunks并将其作为Stream for XML解析传递。

2 个答案:

答案 0 :(得分:5)

Java的XMLReader是一个SAX2解析器。在DOM解析器读取整个XML文件并创建(通常是大型)数据结构(通常是树)来表示其内容的地方,SAX解析器允许您注册将在XML文档的各个部分时调用的处理程序。认可。在该回叫代码中,您只能保存足够的数据来执行您所需的操作 - 例如您可以保存最终作为数据库中的单个行的所有字段,插入该行然后丢弃数据。使用这种类型的设计,程序的内存消耗较少取决于文件大小,而不是单个逻辑数据项的复杂性和大小(在您的情况下,数据将成为数据库中的一行)。

即使你确实使用了DOM风格的解析器,事情也可能没有你想象的那么糟糕。 XML非常冗长,因此(取决于它的结构等)100 MB文件通常只代表10-20 MB的数据,而且只需5 MB的数据就不会特别罕见或难以置信。

答案 1 :(得分:3)

任何SAX解析器都应该工作,因为它不会像DOM解析器那样将整个XML文件加载到内存中。