Desempenho DOM para grades volumes de dados

7 respostas
S

Pessoal,

preciso ler grandes volumes de arquivos xml.

Para pegar as tags estou utilizando DOM, XpathFactoy e passando as expressões para pegar apenas alguns campos do xml.

Gostaria de ter um buffer de leitura para ler varios arquivos, ou ler um bloco do arquivo para ter um bom desempenho. Se fosse um arquivo sequencial eu iria ler por exemplo blocos de 4k para melhorar o desempenho.

É possível ler blocos utilizando dom?
O desempenho do XpathFactoy é satisfatório?
Em resumo como é o desempenho dessas bibliotecas?

Obrigado.

7 Respostas

Mikhas

Se você quer performance, eu acho conselhavel tu usar SAX.

Eu uso o SAX com jColtrane para ler meus XMLs

T

sergio1234:
Pessoal,

preciso ler grandes volumes de arquivos xml.

Para pegar as tags estou utilizando DOM, XpathFactory e passando as expressões para pegar apenas alguns campos do xml.

Gostaria de ter um buffer de leitura para ler varios arquivos, ou ler um bloco do arquivo para ter um bom desempenho. Se fosse um arquivo sequencial eu iria ler por exemplo blocos de 4k para melhorar o desempenho.

É possível ler blocos utilizando dom?
O desempenho do XpathFactory é satisfatório?
Em resumo como é o desempenho dessas bibliotecas?

Obrigado.

“Grandes volumes” quer dizer “muitos arquivos pequenos” ou “poucos arquivos grandes”?
Se for “muitos arquivos pequenos”, pode usar DOM mesmo, mas obviamente é interessante deixar as expressões XPath previamente compiladas, se isso for possível.
Se for "poucos arquivos grandes’, é bastante incômodo, mas você precisa usar algo que encapsule o SAX (que é de uso bem difícil, na verdade, se você não usar uma biblioteca que encapsula o SAX, como o JColtrane.)

Luca

Olá

Eu leria usando Stax que vem dentro do Java. Não que SAX seja difícil mas Stax é ainda mais fácil e depois que você aprende, fica com uma ferramenta que permite tanto ler como escrever XML. Mas caso use SAX o uso do JColtrane (produto nacional) facilita as coisas.

[]s
Luca

S

thingol:
sergio1234:
Pessoal,

preciso ler grandes volumes de arquivos xml.

Para pegar as tags estou utilizando DOM, XpathFactory e passando as expressões para pegar apenas alguns campos do xml.

Gostaria de ter um buffer de leitura para ler varios arquivos, ou ler um bloco do arquivo para ter um bom desempenho. Se fosse um arquivo sequencial eu iria ler por exemplo blocos de 4k para melhorar o desempenho.

É possível ler blocos utilizando dom?
O desempenho do XpathFactory é satisfatório?
Em resumo como é o desempenho dessas bibliotecas?

Obrigado.

“Grandes volumes” quer dizer “muitos arquivos pequenos” ou “poucos arquivos grandes”?
Se for “muitos arquivos pequenos”, pode usar DOM mesmo, mas obviamente é interessante deixar as expressões XPath previamente compiladas, se isso for possível.
Se for "poucos arquivos grandes’, é bastante incômodo, mas você precisa usar algo que encapsule o SAX (que é de uso bem difícil, na verdade, se você não usar uma biblioteca que encapsula o SAX, como o JColtrane.)

São muitos e de todo tamanho. Como é essa previa compilação da XPath? estou fazendo assim (XPathExpression expr = xpath.compile(expression);).

T

É isso mesmo.

Dependendo do que você quer, talvez tenha de usar um produto pago, e aprender XQuery:

Talvez você não precise desse poder de fogo todo.

sergiotaborda

sergio1234:
Pessoal,

preciso ler grandes volumes de arquivos xml.

Para pegar as tags estou utilizando DOM, XpathFactoy e passando as expressões para pegar apenas alguns campos do xml.

O que vc quer fazer é um filtro de xml. a tecnologia padrão para isso é o XSLT. Vc transforma um xml imenso em um xml que só tem o que vc precisa.
depois vc usa DOM ou outra coisa em cima do simplificado. Se for escrever para banco, por exemplo, é possivel converter o xml original directamente para instruções SQL via XSLT sem passar pelo dom ou qq outra coisa.

S

Obrigado pela ajuda!

Criado 21 de julho de 2009
Ultima resposta 21 de jul. de 2009
Respostas 7
Participantes 5