我有大约50000个XML文件,每个文件的大小为50KB。我想在这些文件中搜索数据,但到目前为止我的解决方案非常慢。有没有办法提高搜索性能?
答案 0 :(得分:6)
您可以使用Lucene.NET,一个轻量级,快速,平面的文件搜索索引引擎。
有关入门教程,请参阅http://codeclimber.net.nz/archive/2009/09/02/lucene.net-your-first-application.aspx。
答案 1 :(得分:1)
您始终可以将文件内容索引到数据库并在那里执行搜索。数据库在搜索方面非常高效。
答案 2 :(得分:1)
我假设您使用的是Windows,您可以使用Windows桌面搜索快速搜索文件。您将使用Windows索引,该索引将在文件更改时更新。可以在.NET中使用的SDK is available here
答案 3 :(得分:0)
很大程度上取决于这些XML文件的性质。它们只是50,000个不会重新生成的XML文件吗?还是他们不断变化?您希望索引的XML文件中是否只有某些元素可用于搜索?
当然打开50k文件句柄,阅读其内容,搜索文本会非常慢。我同意Pavel的观点,将数据放入数据库会产生很多性能,但如果您的XML文件经常发生变化,您将不得不采取一些方法使它们与数据库保持同步。
如果您想推出自己的解决方案,我建议您扫描所有文件并创建单词索引。如果您的文件经常更改,您还需要跟踪“上次修改”的日期,如果文件的更改时间比此更新,请更新索引。这样,你将有一个巨大的单词索引,如果搜索是“foo”,索引将显示该单词可以在文件文件39209.xml,file57209和file01009.xml中找到。根据XML的性质,您甚至可以将元素存储在索引文件中(实质上,这就像将所有XML文件展平为一个)。
答案 4 :(得分:0)
您可以启动Splunk实例并让它为您的文件编制索引。它主要被称为日志解析器,但仍然可以满足您的需求。它将文件标记为单词,索引这些单词,并提供基于Web和基于CLI的搜索工具,支持复杂的搜索条件。
答案 5 :(得分:0)
使用XML数据库。如果你想要开源的话,通常的建议是eXist,MarkLogic,如果你想要商业广告,你可以使用SQL Server,如果微软对你很重要,你不想要最终的XML功能。如果你想评估它们,还有很多其他的。所有数据库产品都有一个陡峭的学习曲线,但对于这些数据量,它是正确的解决方案。