2012-04-11 73 views
2

我有大約50000個XML文件,每個文件大小爲50KB。我想在這些文件中搜索數據,但目前爲止我的解決方案非常緩慢。有什麼方法可以提高搜索性能嗎?搜索成千上萬的XML文件

+0

有沒有將數據移入數據庫的機會?如果沒有,你可以建立某種索引,查詢速度會更快嗎? – 2012-04-11 04:44:43

+0

您是否添加了需要搜索的新文件?搜索的原因是什麼(只是高層次...總是需要提取客戶信息等)。可能有助於評估。如上所述,Lucene,加載到數據庫等可能會有所幫助,但可能不適合您的預期結果 – scarpacci 2012-04-11 04:59:46

回答

1

您可以隨時將文件的內容編入數據庫並在其中執行搜索。數據庫在搜索方面非常好用。

6

您可以使用Lucene.NET這一輕量級快速平面文件搜索索引引擎。

請參閱http://codeclimber.net.nz/archive/2009/09/02/lucene.net-your-first-application.aspx瞭解入門教程。

+0

Lucene是爲這樣的東西做的。人們總是想訴諸於數據庫,但全文索引幾乎肯定是提問者真正需要的。 – Chris 2012-04-11 05:05:51

+0

這取決於他們正在尋找什麼。如果你在文本中搜索單詞,Lucene很好。如果你想知道烏拉圭西紅柿的平均價格,一個自由文本系統不會告訴你。 – 2012-04-11 08:23:42

0

很大程度上取決於這些XML文件的性質。他們只是5萬個不會重新生成的XML文件嗎?或者他們在不斷變化?您想要索引的XML文件中是否只有某些元素用於搜索?

當然,打開50k文件句柄,閱讀它們的內容和搜索文本將會非常緩慢。我同意Pavel的觀點,把數據放到數據庫中會產生很多性能,但是如果你的XML文件經常變化,你必須有一些方法來保持它們與數據庫的同步。

如果您想推出自己的解決方案,我建議掃描所有文件並創建一個字索引。如果您的文件頻繁更改,您還需要跟蹤「上次修改日期」,並且如果文件最近發生更改,請更新您的索引。這樣,您將擁有一個巨大的單詞索引,並且如果搜索是針對「foo」的,則索引將顯示該單詞可以在文件file39209.xml,file57209和file01009.xml中找到。根據XML的性質,您甚至可以將這些元素存儲在索引文件中(實質上,就像將所有的XML文件放到一個文件中一樣)。

1

我假設您正在使用Windows,並且您可以使用Windows桌面搜索快速搜索文件。您將使用Windows索引,在文件更改時更新該索引。可以使用.NET的SDK is available here可以使用.NET

0

您可以啓動一個Splunk實例並使其索引您的文件。它主要用作日誌解析器,但仍可滿足您的需求。它將文件標記爲單詞,爲這些單詞編制索引,並提供基於網絡和基於CLI的搜索工具,以支持複雜的搜索條件。

+0

謝謝大家的回覆,實際上xml文件無法轉換爲數據庫,但我會將所有唯一的單詞編入索引並將它們鏈接到文件ID。真的很感謝你提前。 – 2012-04-15 03:04:35

0

使用XML數據庫。如果你想要開源的話,通常的建議是eXist,如果你想要商業的話可以使用MarkLogic,但是如果微軟對你很重要,並且你不想要最終的XML功能,你可以使用SQL Server。如果你想評估他們,還有很多其他的。所有的數據庫產品都有一個陡峭的學習曲線,但對於這些數據量來說,這是正確的解決方案。