Как я могу найти большой набор данных XML? - PullRequest
4 голосов
/ 06 октября 2009

У меня есть DataModule с XML, и мне нужно выполнить поиск ...

К сожалению, существует более 300 000 записей, и я не могу сделать цикл для проверки по одной.

Можно ли сделать запрос без использования базы данных?

Есть ли другое решение?

Ответы [ 6 ]

3 голосов
/ 06 октября 2009

Вы можете искать, используя что-то вроде XPath: однако это будет означать, что реализация XPath выполняет поиск от вашего имени (что не обязательно повышает производительность).

3 голосов
/ 06 октября 2009

XML подходит для небольших объемов информации, но для такого большого набора данных реляционная база данных - действительно единственный разумный выбор, особенно, если вам нужно иметь возможность запрашивать его.

2 голосов
/ 06 октября 2009

Я думаю, что, вероятно, важно спросить Почему вы используете XML для хранения записей 300 КБ? . Поскольку XML - не самый эффективный формат для манипулирования данными.

Если вы застряли с XML, то вам лучше всего прочитать XML-файл в какую-то базу данных (вам может не хватить таблицы в памяти, но с другой стороны вам может не хватить памяти). Я думаю, что если вы используете объект TXMLDocument для загрузки XML-файла, у вас возникнет серьезная проблема с производительностью или не хватит памяти (у меня возникли проблемы, когда я некоторое время назад играл с 250-килограммовым файлом xml-файла).

Возможно, вы сможете использовать MSXML DOM напрямую (вы можете импортировать библиотеку типов) или использовать SAX, что позволит вам последовательно анализировать ее, с которой у меня не было большого опыта.

1 голос
/ 06 октября 2009

Существует несколько баз данных в памяти, которые могут быть полезны. По крайней мере, вы можете индексировать и запрашивать данные по мере необходимости. Один из тех, что я знаю, это от components4developers.com. David

0 голосов
/ 17 ноября 2010

Для парсера SAX для Delphi, проверьте этот вопрос Stackoverflow:

Есть ли парсер SAX для Delphi и Free Pascal?

0 голосов
/ 06 октября 2009

Вы не говорите, как реализуете источник данных. Я использовал TClientDataSet, подключенный через TXMLTransformProvider (ОК не для записей 300K), но для нескольких тысяч и просто установка фильтра и отфильтрованных свойств кажется «Запросом», это просто прекрасно ...

Или я что-то пропустил?

...