我有大約50000個XML文件,每個文件大小爲50KB。我想在這些文件中搜索數據,但目前爲止我的解決方案非常緩慢。有什麼方法可以提高搜索性能嗎?搜索成千上萬的XML文件
回答
您可以隨時將文件的內容編入數據庫並在其中執行搜索。數據庫在搜索方面非常好用。
您可以使用Lucene.NET這一輕量級快速平面文件搜索索引引擎。
請參閱http://codeclimber.net.nz/archive/2009/09/02/lucene.net-your-first-application.aspx瞭解入門教程。
Lucene是爲這樣的東西做的。人們總是想訴諸於數據庫,但全文索引幾乎肯定是提問者真正需要的。 – Chris 2012-04-11 05:05:51
這取決於他們正在尋找什麼。如果你在文本中搜索單詞,Lucene很好。如果你想知道烏拉圭西紅柿的平均價格,一個自由文本系統不會告訴你。 – 2012-04-11 08:23:42
很大程度上取決於這些XML文件的性質。他們只是5萬個不會重新生成的XML文件嗎?或者他們在不斷變化?您想要索引的XML文件中是否只有某些元素用於搜索?
當然,打開50k文件句柄,閱讀它們的內容和搜索文本將會非常緩慢。我同意Pavel的觀點,把數據放到數據庫中會產生很多性能,但是如果你的XML文件經常變化,你必須有一些方法來保持它們與數據庫的同步。
如果您想推出自己的解決方案,我建議掃描所有文件並創建一個字索引。如果您的文件頻繁更改,您還需要跟蹤「上次修改日期」,並且如果文件最近發生更改,請更新您的索引。這樣,您將擁有一個巨大的單詞索引,並且如果搜索是針對「foo」的,則索引將顯示該單詞可以在文件file39209.xml,file57209和file01009.xml中找到。根據XML的性質,您甚至可以將這些元素存儲在索引文件中(實質上,就像將所有的XML文件放到一個文件中一樣)。
我假設您正在使用Windows,並且您可以使用Windows桌面搜索快速搜索文件。您將使用Windows索引,在文件更改時更新該索引。可以使用.NET的SDK is available here可以使用.NET
您可以啓動一個Splunk實例並使其索引您的文件。它主要用作日誌解析器,但仍可滿足您的需求。它將文件標記爲單詞,爲這些單詞編制索引,並提供基於網絡和基於CLI的搜索工具,以支持複雜的搜索條件。
謝謝大家的回覆,實際上xml文件無法轉換爲數據庫,但我會將所有唯一的單詞編入索引並將它們鏈接到文件ID。真的很感謝你提前。 – 2012-04-15 03:04:35
使用XML數據庫。如果你想要開源的話,通常的建議是eXist,如果你想要商業的話可以使用MarkLogic,但是如果微軟對你很重要,並且你不想要最終的XML功能,你可以使用SQL Server。如果你想評估他們,還有很多其他的。所有的數據庫產品都有一個陡峭的學習曲線,但對於這些數據量來說,這是正確的解決方案。
- 1. Symfony 2搜索成千上萬行
- 2. elasticsearch成批成千上萬的文件
- 3. 搜索文本(可能)成千上萬的令牌
- 4. 在成千上萬的小文件中存儲XML數據
- 5. 閱讀成千上萬的文件並寫入數百萬的Java文件
- 6. 造成成千上萬錯誤的文件(C++)
- 7. 添加TREC的標記格式,成千上萬的文件
- 8. JavaMelody崩潰的服務器與成千上萬RRD的文件
- 9. Wordpress插入成千上萬的記錄
- 10. 刮成千上萬的網頁
- 11. 成千上萬的外來gunicorn工人
- 12. 與dojo繪製成千上萬的點
- 13. Wordpress顯示成千上萬的帖子
- 14. NHibernate保存成千上萬的項目
- 15. 使用數據庫而不是成千上萬的小文件
- 16. 刪除CSV文件中的成千上萬行
- 17. 鞏固成千上萬的文件與ln
- 18. R,重命名成千上萬的下載文件
- 19. 複製成千上萬的文件(按名稱過濾)到指定文件夾
- 20. 爲成千上萬行的每個網站用戶(成千上萬)製作SQL表?
- 21. 格式化值到千千萬萬
- 22. 將成千上萬的收件人導入Outlook中的Outlook MSG
- 23. 長文本或成千上萬行,或者別的什麼?
- 24. 如何合併成千上萬的json文檔?
- 25. 如何避免成千上萬無用的ListView.SelectedIndexChanged事件?
- 26. 成千上萬個值的紅移IN條件
- 27. 搜索XML文件
- 28. 成千上萬的SELECT語句在大型文本字段中使用LIKE搜索 - 如何提高性能?
- 29. 什麼是最好的,刪除包含成千上萬的文件(在Ubuntu)
- 30. 用Paperclip上傳成千上萬的圖像到S3
有沒有將數據移入數據庫的機會?如果沒有,你可以建立某種索引,查詢速度會更快嗎? – 2012-04-11 04:44:43
您是否添加了需要搜索的新文件?搜索的原因是什麼(只是高層次...總是需要提取客戶信息等)。可能有助於評估。如上所述,Lucene,加載到數據庫等可能會有所幫助,但可能不適合您的預期結果 – scarpacci 2012-04-11 04:59:46