XML: обработка больших данных

Какой XML-парсер вы порекомендуете для следующих целей:

XML-файл (отформатированный, содержащий пробелы) составляет около 800 МБ. В основном он содержит три типа тегов (назовем их n, w и r). У них есть атрибут id, который я должен искать как можно быстрее.

Удаление атрибутов, которые мне не нужны, может сэкономить около 30%, может быть, немного больше.

Первая часть для оптимизации второй части: Есть ли хороший инструмент (командная строка Linux и Windows, если это возможно) длябез труда удалить неиспользуемые атрибуты в определенных тегах? Я знаю, что XSLT можно использовать. Или есть легкие альтернативы? Кроме того, я мог бы разделить его на три файла, по одному для каждого тега, чтобы получить скорость для последующего анализа ... Скорость не слишком важна для подготовки данных, конечно, было бы неплохо, если бы это заняло несколько минут, а не часов.

Вторая часть: Как только я подготовлю данные, будь они сокращены или нет, я смогу найти упомянутый мной ID-атрибут, который является критичным ко времени.

Оценки с использованиемwc -l скажите, что есть около 3M N-тегов и около 418K W-тегов. Последние могут содержать до 20 субтегов каждый. W-теги также содержат некоторые, но они будут удалены.

«Все, что мне нужно сделать» - это перемещаться между тегами, содержащими определенные id-атрибуты. Некоторые теги имеют ссылки на другие идентификаторы, поэтому дают мне дерево, может быть, даже график. Исходные данные большие (как уже упоминалось), но набор результатов не должен быть слишком большим, поскольку мне нужно только выделить некоторые элементы.

Теперь вопрос: какую библиотеку XML-разбора я должен использовать для такого рода обработки? Я бы использовал Java 6 в первую очередь, имея в виду портирование его на BlackBerry.

Может быть полезно просто создать плоский файл, индексирующий идентификаторы и указывающий на смещение в файле? Есть ли необходимость в оптимизации, упомянутой в верхней части? Или есть парсер, который, как известно, так же быстро работает с исходными данными?

Небольшое примечание: чтобы проверить, я взял идентификатор, находящийся в самой последней строке файла, и искал идентификатор, используя grep. Это заняло около минуты на Core 2 Duo.

Что произойдет, если файл станет еще больше, скажем, 5 ГБ?

Я ценю любое уведомление или рекомендацию. Спасибо всем большое заранее и всего наилучшего

Ответы на вопрос(6)

Ваш ответ на вопрос