Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.NET中快速搜索XMl文件(或如何索引XMl文件)_.net_Xml_Database_Xpath_Indexing - Fatal编程技术网

在.NET中快速搜索XMl文件(或如何索引XMl文件)

在.NET中快速搜索XMl文件(或如何索引XMl文件),.net,xml,database,xpath,indexing,.net,Xml,Database,Xpath,Indexing,我必须实现一个搜索功能,它能够快速执行对XML数据的任意复杂查询。如果用户进行查询,则必须搜索所有XML文件以查找可能的匹配项。 用户将拥有大量的XML文件(10000个或更多),这些文件的大小通常只有几千字节。所有XML文件都具有几乎相同的结构 我已经对XPath进行了基准测试,它对于我的需求来说太慢了 如何才能最有效地完成?是否可以为XML文件的内容创建索引(保留内容语义,而不仅仅是纯文本搜索) 将XML数据放入(嵌入式)SQL数据库并使用SQL进行查询是否有用 我还有什么其他的可能性吗?不

我必须实现一个搜索功能,它能够快速执行对XML数据的任意复杂查询。如果用户进行查询,则必须搜索所有XML文件以查找可能的匹配项。 用户将拥有大量的XML文件(10000个或更多),这些文件的大小通常只有几千字节。所有XML文件都具有几乎相同的结构

我已经对XPath进行了基准测试,它对于我的需求来说太慢了

如何才能最有效地完成?是否可以为XML文件的内容创建索引(保留内容语义,而不仅仅是纯文本搜索)

将XML数据放入(嵌入式)SQL数据库并使用SQL进行查询是否有用

我还有什么其他的可能性吗?

不要尝试重新发明轮子! 我将XML导入数据库(例如SQLite)(加上元数据、XML信息),并查询该数据库

编辑1:

您可以实现一个“放置文件夹”,它在第一次运行时被“索引”或导入。可以实现文件夹监视程序,以仅更新XML文件的新/更改。SQLite可以在Memory中运行,以获得最快的I/O性能。

不要尝试重新发明轮子! 我将XML导入数据库(例如SQLite)(加上元数据、XML信息),并查询该数据库

编辑1:


您可以实现一个“放置文件夹”,它在第一次运行时被“索引”或导入。可以实现文件夹监视程序,以仅更新XML文件的新/更改。SQLite可以在memeory中运行,以获得最快的I/O性能。

最快的方法是创建自己的内存中XML可用数据模型,将其转换为简单对象和简单类型,并以最适合查询的结构进行组织。根据您的问题(使用Dictionary/SortedDictionary)对其进行适当的索引。这种方法将比使用SQL数据库的方法快得多,使用SQL数据库也将比查询每个XML快得多。根据查询的复杂性,这可能是一件相当简单的事情,也可能是一件非常困难的事情,在这种情况下,您应该选择嵌入式数据库。

最快的方法是创建自己的内存中XML可用数据模型,将其转换为简单对象和简单类型,并将其组织在最适合您的查询的结构中。根据您的问题(使用Dictionary/SortedDictionary)对其进行适当的索引。这种方法将比使用SQL数据库的方法快得多,使用SQL数据库也将比查询每个XML快得多。根据查询的复杂性,这可能是一件相当简单的事情,也可能是一件非常困难的事情,在这种情况下,您应该选择嵌入式数据库。

SQL Server 2005+允许创建。查询可以在SQL server上执行,而无需在应用程序端检索XML数据。此功能在免费的Express edition中提供。

SQL Server 2005+允许创建。查询可以在SQL server上执行,而无需在应用程序端检索XML数据。此功能出现在免费的Express edition中。

用于索引xml内容:使用Lucene(以及基于.net的实现)。这将允许您快速检索包含某些特定值的xml文档;然后您可能会更加关注这些内容。

对于xml内容的索引:使用Lucene(以及基于.net的实现)。这将允许您快速检索包含某些特定值的xml文档;然后您可能会更加注意这些问题。

您是认真建议在程序加载时将所有数据加载到内存中吗?你疯了:)我需要一个解决方案,在每个程序开始加载数千个文件到内存时不需要一个小时:)加载10000个小xml文件不需要一个小时。可能是几分钟的事。第一次加载后,您可以将数据保存在二进制平面文件中,并监视文件的更改,仅更新之后更改的数据。在我的问题中,我说的是“不超过10000个”。在某个时刻,将所有内容加载到内存是不可能的。哦,对不起,我以为它不会比10k高很多。无论哪种方式,您都必须解析所有文件。数据库方法将降低内存使用率,但第一次加载的时间将是相等的(实际上,考虑到数据库操作比填充内存模型慢,数据库的情况会更糟)。还要考虑到内存中保存的数据比XML文件中的数据小(没有标记/格式开销)。另外请注意,对于大于1GB的数据集,不建议使用SQLite数据库。您是否认真建议在程序加载时将所有数据加载到内存中?你疯了:)我需要一个解决方案,在每个程序开始加载数千个文件到内存时不需要一个小时:)加载10000个小xml文件不需要一个小时。可能是几分钟的事。第一次加载后,您可以将数据保存在二进制平面文件中,并监视文件的更改,仅更新之后更改的数据。在我的问题中,我说的是“不超过10000个”。在某个时刻,将所有内容加载到内存是不可能的。哦,对不起,我以为它不会比10k高很多。无论哪种方式,您都必须解析所有文件。数据库方法将降低内存使用率,但第一次加载的时间将是相等的(实际上,考虑到数据库操作比填充内存模型慢,数据库的情况会更糟)。还要考虑到内存中保存的数据比XML文件中的数据小(没有标记/格式开销)。还要注意,对于大于1GB的数据集,不建议使用SQLite数据库。但SQL Server不是嵌入式数据库,您必须单独安装。我不能这样做,但是我可以