代码之家  ›  专栏  ›  技术社区  ›  Atmocreations

XML:处理大数据

  •  3
  • Atmocreations  · 技术社区  · 16 年前

    出于以下目的,您建议使用哪种XML解析器:

    XML文件(已格式化,包含空格)约为800MB。它主要包含三种类型的标记(我们称它们为n、w和r)。 它们有一个名为id的属性,我必须尽快搜索它。

    第一部分用于优化第二部分: 容易地 是否删除某些标记中未使用的属性?我知道可以使用XSLT。或者有什么简单的选择吗?另外,我可以将它分成三个文件,每个标签一个文件,以提高后期解析的速度。。。

    第二部分: 一旦我准备好数据,不管它是否缩短,我应该能够搜索我提到的ID属性,这是时间关键。

    wc -l

    现在的问题是:对于这种处理,我应该使用什么样的XML解析库?我将首先使用Java6,并考虑将其移植到BlackBerry。

    只创建一个平面文件索引id并指向文件中的偏移量是否有用?甚至有必要进行上半部分提到的优化吗?或者有没有已知的解析器处理原始数据的速度相当快?

    如果文件变得更大,比如说5 GB,会发生什么?

    提前非常感谢大家,并致以问候

    6 回复  |  直到 16 年前
        1
  •  4
  •   e4c5    16 年前

    正如Bouman所指出的,将其视为纯文本处理将为您提供尽可能快的速度。

        2
  •  1
  •   Kirzilla    16 年前

    我正在使用XMLStarlet( http://xmlstar.sourceforge.net/

        3
  •  1
  •   Szyzygy    16 年前

    大型XML文件和Java堆空间是一个棘手的问题。StAX可以处理大文件——它当然可以处理1GB的文件,而不会让人眼花缭乱。这里有一篇关于使用StAx的有用文章: XML.com 这让我在大约20分钟内完成了跑步。

        4
  •  1
  •   Roland Bouman    16 年前

    也许您应该看看VTD-XML: http://en.wikipedia.org/wiki/VTD-XML (见 http://sourceforge.net/projects/vtd-xml/ (供下载)

    我知道这是亵渎神明,但你有没有考虑过对awk或grep进行预处理?我的意思是,我知道你实际上不能解析xml,也不能用它来检测嵌套结构(比如xml)中的错误,但也许你的xml是这样一种形式,它恰好是可能的?

    我知道可以使用XSLT。或者有什么简单的选择吗?

    据我所知,XSLT处理器在源文档的DOM树上运行…因此他们需要解析整个文档并将其加载到内存中…对于这么大的文档(或者您可能有足够的内存来处理它)可能不是一个好主意。有一种称为流式XSLT的技术,但我认为这种技术非常年轻,而且并不多实现,没有免费的AFAIK,所以您可以尝试。

        5
  •  1
  •   bill seacham    16 年前

    尝试XmlSplit。这是一个命令行程序,带有指定在何处按元素、属性等分割的选项。也很快。

        6
  •  0
  •   srini.venigalla    16 年前

    要去除空节点和不需要的属性,请从Identity Transform模板开始,并将其过滤掉。然后使用XPATH搜索所需的标记。

    您还可以尝试多种变体:

    • 将较大的XML文件拆分为较小的文件,并使用XML Include保留其组成。这非常类似于将大型源文件拆分为较小的源文件,并使用include“x.h”之类的概念。这样,您可能不必处理大文件。

    • 通过标识转换运行XML时,使用生成的-id()函数为每个感兴趣的节点分配UNID。

    • 构建用于搜索的前端数据库表。使用上面生成的UNID快速确定数据在文件中的位置。