【问题标题】:How to search fast/indexed inside very BIG XML file?如何在非常大的 XML 文件中快速搜索/索引?
【发布时间】:2013-02-03 09:31:28
【问题描述】:

假设我有一个非常大的 XML 文件,其中的条目具有 <id> 标记或 id="" 属性。

如何通过这个 id 进行搜索?我可以创建一些搜索索引什么的吗?

目前我正在使用org.w3.dom。它有一些搜索方式吗?

更新

我的大 XML 文件是一个下载的 Wikipedia。它是 40G 大小,拥有数百万条记录。

是否可以用 Lucene 之类的东西对其进行索引,然后快速搜索 ID?

更新2

已尝试BaseX。它吃掉了我的 XML 并创建了 32Gb 的数据库。不知道它是否截断了数据或 32Gb 是因为一些压缩。

很遗憾,按 ID 搜索需要 70-80 秒或更长时间。所以它比 Mediawiki API 查询要长。

【问题讨论】:

  • 如果您可以在您的 XML 上使用 DOM,它有多大?通常它比内存中的 DOM 对象大 10 倍。如果你有一个 DOM,你可以构建一个 Map<String, DOMEntry>
  • 我还没有开始使用大 XML。我正在使用带有小型 XML 的 DOM。大的是一个下载的维基百科,它有数百万页和 40G 大小。我需要索引一次,然后使用索引。
  • 在这种情况下,您需要解析所有文档并存储 id 以及可以在 Map 或数据库中找到它们的位置,或者根据您的喜好在两者中找到它们。我会使用 SAX 解析器,因为它可能更有效。
  • 这意味着将 XML 转换为数据库。那么最好不要下载 XML 而是下载数据库。我想先找到一种使用 XML 的方法。难道没有一些方法可以索引 XML 吗???

标签: java xml dom indexing


【解决方案1】:

所以为了读写XML文件,你需要先解析里面的数据。解析器有多种类型,主要有 DOM、SAX、StAX。

我不推荐使用 DOM 解析器进行 XML 解析,尤其是在解析大型 XML 文件时。因为 DOM 解析器首先将所有内容读入您的内存,然后尝试从中读取数据。如果您的 XML 文件非常大,这是非常低效的。 SAX 和 StAX 解析器基本上是 DOM 的改进版本。从这里阅读 Java 中的 StAX 解析器

StAX parser tutorial

我认为StAX解析器是最适合读取大型XML文件的解析器。

仅供参考,这里也是 SAX 解析器的链接

SAX parser tutorial in Java

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 2016-10-08
    • 2010-10-25
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多