7

この質問は 、Java の小さくて単純なドキュメント用の最速の XML パーサーに多少関連しています が、さらにいくつかの詳細があります。

私は、多数 (数千万) の小さな (約 300k) xml ドキュメントを解析する必要があるアプリケーションに取り組んでいます。現在の実装では xerces-j を使用しており、1.5 GHz のマシンで xml ドキュメントごとに約 2.5 ミリ秒かかります。この性能を上げたい。この記事に出会いました

http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html

libxml2 はどの Java パーサーよりも約 1 桁速く解析できると主張しています。信じられるかどうかわかりませんが、私の注意を引きました。 jvm から libxml2 を使用しようとした人はいますか? もしそうなら、Java dom 解析 (xerces) より速いですか? 私はまだ Java DOM 構造が必要だと考えていますが、C 構造の DOM から Java-DOM へのコピーにはそれほど時間はかからないと思います。java-dom が必要です。この場合、sax は役に立ちません。

更新: libxml2 のテストを作成したところ、xerces よりも高速ではありませんでした...確かに、私の C コーディング能力は非常にさびています。

更新ここで質問を少し広げました: なぜ sax 解析は dom 解析よりも速いのですか? そしてstaxはどのように機能しますか? ドムを捨てる可能性もある。

ありがとう

4

2 に答える 2

2

Java では、StAX JSR-173が XML を解析する最速の方法であると一般に考えられています。StAX には複数の実装があり、Woodstoxの実装は一般的に高速であると見なされています。

パフォーマンスを向上させるために、DOM は避けます。XML で何をしていますか? 最終的にオブジェクトとして扱う場合は、OXM ソリューションを検討する必要があります。標準は JAXB JSR-222です。MOXy (私は技術リーダーです)などの JAXB 実装では、パフォーマンスを向上させる部分的なマッピングを行うこともできます。

于 2010-09-24T14:27:57.793 に答える
0

まず、あなたの質問には質問が含まれていません。何を知りたいですか?

JNIを使​​用してc-domをjava-domに変換していたと思います。公式の数値があるかどうかはわかりませんが、私の経験では、c+JNI は Java で直接実行するよりも遅いことがよくあります。

本当に処理を高速化したい場合は、dom を取り除くようにしてください (なぜそれが必要なのですか? 一緒に解決策を考えられるかもしれません)。すべての xml ファイルが同じスキーマを持つ場合は、独自の特殊なデータ モデル (および SAX パーサー) を使用してください。

xml のサブセットのみを使用する場合 (つまり、名前空間がなく、属性が少ない場合)、より効率的な Java オブジェクトを直接生成する独自のパーサーを作成することを検討してください (ただし、それはお勧めしません)。

于 2010-09-23T13:28:22.993 に答える