我有大约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. 搜索文本(可能)成千上万的令牌
- 2. 在成千上万的小文件中存储XML数据
- 3. 阅读成千上万的文件并写入数百万的Java文件
- 4. 添加TREC的标记格式,成千上万的文件
- 5. Wordpress插入成千上万的记录
- 6. NHibernate保存成千上万的项目
- 7. 成千上万的外来gunicorn工人
- 8. 删除CSV文件中的成千上万行
- 9. R,重命名成千上万的下载文件
- 10. 巩固成千上万的文件与ln
- 11. 复制成千上万的文件(按名称过滤)到指定文件夹
- 12. 格式化值到千千万万
- 13. 将成千上万的收件人导入Outlook中的Outlook MSG
- 14. 如何合并成千上万的json文档?
- 15. 如何避免成千上万无用的ListView.SelectedIndexChanged事件?
- 16. 搜索XML文件
- 17. 成千上万的SELECT语句在大型文本字段中使用LIKE搜索 - 如何提高性能?
- 18. 批次或击删除时间戳在成千上万的文件
- 19. 转换成十万和千分之
- 20. 成千上万的Java线程产生的线程...为什么?
- 21. 用PHP搜索XML文件?
- 22. 成千上万的图片返回403禁止
- 23. 将成千上万的实体插入BigTable
- 24. 如何将成千上万的VBScript行转换为C#?
- 25. 为成千上万的图像添加动态水印?
- 26. 谷歌地图api v2 - 成千上万的标记
- 27. 每页刷新成千上万的记录
- 28. 如何优化查询成千上万的ID
- 29. Java8慢编译为成千上万的默认方法与
- 30. OpenGL绘制成千上万的2D圈子
有没有将数据移入数据库的机会?如果没有,你可以建立某种索引,查询速度会更快吗? – 2012-04-11 04:44:43
您是否添加了需要搜索的新文件?搜索的原因是什么(只是高层次...总是需要提取客户信息等)。可能有助于评估。如上所述,Lucene,加载到数据库等可能会有所帮助,但可能不适合您的预期结果 – scarpacci 2012-04-11 04:59:46