XML: processar grandes dados

Qual analisador de XML você recomenda para o seguinte objetivo:

O arquivo XML (formatado, contendo espaços em branco) é de cerca de 800 MB. Ele contém principalmente três tipos de tag (vamos chamá-los de n, we er). Eles têm um atributo chamado id, que eu teria que procurar o mais rápido possível.

A remoção de atributos de que não preciso pode economizar cerca de 30%, talvez um pouco mais.

Primeira parte para otimizar a segunda parte: Existe alguma boa ferramenta (linha de comando linux e windows, se possível) parafacilmente remover atributos não utilizados em determinadas tags? Eu sei que o XSLT poderia ser usado. Ou existem alternativas fáceis? Além disso, eu poderia dividi-lo em três arquivos, um para cada tag, para ganhar velocidade para análise posterior ... A velocidade não é muito importante para a preparação dos dados, é claro que seria bom quando levasse alguns minutos do que horas.

Segunda parte: Depois de preparar os dados, encurtados ou não, devo procurar o atributo de ID que mencionei, o que é crítico em termos de tempo.

Estimativas usandowc -l diga-me que existem cerca de 3M N-tags e cerca de 418K W-tags. Os últimos podem conter até aproximadamente 20 subtags cada. Os W-Tags também contêm alguns, mas seriam removidos.

"Tudo o que preciso fazer" é navegar entre as tags que contêm determinados atributos de ID. Algumas tags têm referências a outros IDs, portanto, me dão uma árvore, talvez até um gráfico. Os dados originais são grandes (como mencionado), mas o conjunto de resultados não deve ser muito grande, pois só preciso escolher certos elementos.

Agora a pergunta: qual biblioteca de análise XML devo usar para esse tipo de processamento? Eu usaria o Java 6 em uma primeira instância, tendo em mente estar portando-o para o BlackBerry.

Pode ser útil criar apenas um arquivo simples indexando os IDs e apontando para um deslocamento no arquivo? É necessário fazer as otimizações mencionadas na parte superior? Ou há um analisador conhecido por ser tão rápido com os dados originais?

Nota: Para testar, peguei o id na última linha do arquivo e procurei o id usando grep. Isso levou cerca de um minuto em um Core 2 Duo.

O que acontece se o arquivo aumentar ainda mais, digamos 5 GB?

Agradeço qualquer aviso ou recomendação. Muito obrigado a todos antecipadamente e cumprimentos

questionAnswers(6)

yourAnswerToTheQuestion