Быстрый поиск в файлах XMl в .NET (или Как индексировать файлы XML) - PullRequest
2 голосов
/ 02 июня 2010

Мне нужно реализовать функцию поиска, которая способна быстро выполнять произвольные сложные запросы к XML-данным. Если пользователь делает запрос, все файлы XML должны быть найдены для поиска возможных совпадений. У пользователей будет много XML-файлов (несколько сотен или более), размер которых обычно составляет несколько килобайт. Все XML-файлы имеют практически одинаковую структуру.

Я уже тестировал XPath, он слишком медленный для моих нужд.

Как это можно сделать наиболее эффективно? Можно ли создавать индексы для содержимого файлов XML (сохраняя семантику содержимого, а не просто полнотекстовый поиск)?

Будет ли полезно помещать данные XML в (встроенную) базу данных SQL и выполнять запросы с SQL?

Какие еще у меня есть возможности?

Ответы [ 4 ]

0 голосов
/ 07 июня 2010

Для индексирования содержимого xml: используйте Lucene (и его реализацию на основе .net). Это позволит вам быстро получить XML-документы, содержащие некоторые конкретные значения; тогда вы могли бы уделить больше внимания этим.

0 голосов
/ 02 июня 2010

Самый быстрый способ - создать собственную модель данных в памяти, доступную в XML, преобразовать ее в простые объекты и простые типы и организовать ее в структуре, которая наилучшим образом соответствует вашим запросам. Индексируйте его дополнительно в соответствии с вашей проблемой (используя Dictionary / SortedDictionary). Этот подход будет значительно быстрее, чем при использовании базы данных SQL, и использование базы данных SQL также будет намного быстрее, чем запросы к каждому XML. В зависимости от сложности ваших запросов, это может варьироваться от довольно простой вещи до очень сложной, и в этом случае вам обязательно нужно перейти на встроенную базу данных.

0 голосов
/ 02 июня 2010

SQL Server 2005+ позволяет создавать XML-индексы . Запросы могут выполняться на сервере SQL без извлечения данных XML на стороне приложения. Эта функция присутствует в бесплатной версии Express.

0 голосов
/ 02 июня 2010

Не пытайтесь заново изобрести колесо!

Я бы импортировал XML в базу данных (например, SQLite) (плюс метаданные, информацию XML) и запросил бы это.* Редактировать 1:

Вы можете реализовать «папку удаления», которая «индексируется» / импортируется при первом запуске.Наблюдатель папок может быть реализован ТОЛЬКО для обновления новых / изменений в файлах XML.SQLite может быть запущен в памяти для максимальной производительности ввода / вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...