2013-02-03 93 views
2

假設我有非常大的XML文件,其條目具有<id>標記或id=""屬性。如何在BIG XML文件中搜索快速/索引?

如何使用此ID進行搜索?我可以創建一些搜索索引或其他內容嗎?

目前我正在使用org.w3.dom。它有一些搜索手段嗎?

UPDATE

我很大的XML文件是一個下載的維基百科。它的尺寸爲40G,擁有數百萬條記錄。

是否有可能用Lucene之類的東西來索引它,然後快速搜索ID?

UPDATE2

試過BaseX。它吃了我的XML並創建了32Gb的數據庫。不明白是否截斷數據或32Gb是由於某些壓縮。

不幸的是,按ID搜索需要70-80秒或更長時間。所以它比Mediawiki API查詢更長。

+0

如果你可以在你的XML使用DOM,它有多大聯繫?通常它是內存中DOM對象的10倍。如果你有一個DOM,你可以創建一個'Map ' –

+0

我還沒有開始使用大的XML。我正在使用DOM與小XML。大一個是下載的維基百科,它有數百萬頁和40G大小。我需要索引一次,然後使用索引。 –

+0

在這種情況下,您需要解析所有文檔,並根據您的喜好將它們存儲在Map或數據庫或兩者中的位置。我會使用SAX解析器,因爲它可能更高效。 –

回答

3

所以爲了讀寫XML文件,你首先需要解析數據。有不同類型的解析器,主要是DOM,SAX,StAX。

我不會推薦用於XML解析的DOM解析器,特別是在解析大型XML文件時。由於DOM解析器首先將所有內容讀入您的內存,然後嘗試從中讀取數據。如果你的XML文件非常大,這是非常低效的。 SAX和StAX解析器基本上是DOM的改進版本。從這裏

StAX parser tutorial

我覺得StAX的解析器讀取大型XML文件最合適解析器對Java中的StAX解析器讀取。

僅供參考,這裏是SAX解析器太

SAX parser tutorial in Java