Java Webサービスで受け取ったxmlを保存したい。レポートは5分ごとに実行され、xml要素の一部のデータを取得します。
この問題を解決するための2つのアプローチを考えました。
データベースに複数のテーブルを作成して、xmlデータをキャプチャします。基本的に、各要素はデータベース内に独自の列を持ちます。
XMLデータを格納できる列にXML全体をダンプします。レポートの目的で、クエリ自体の値を解析します。
上記のアプローチのどれが、特にパフォーマンスの点で優れていますか?レポートは非常に高い頻度(5分ごと)で生成されるため、これは重要です。
xmlスキーマはかなり複雑で、単純なものではありません。
データが1回書き込まれ、何度もクエリが実行される場合は、XMLドキュメントを1回解析し、データを適切なリレーショナルスキーマに格納し、リレーショナルスキーマをクエリする方がほぼ確実に効率的です。XMLの解析は安価ではないため、5分ごとに複数のXML文書を解析する可能性のあるオーバーヘッドはかなりの量になる可能性があります。
もちろん、パフォーマンスに関するすべての質問と同様に、走行距離はさまざまなので、テストする価値があります。Oracle 11.2を使用していて、データをバイナリXMLとして格納し(この場合、データは解析後に格納されます)、格納するXMLTypeに適切なXMLIndexesを作成すると、データをXMLドキュメントに残すとパフォーマンスが低下する可能性があります。かなり小さい。それでも、適切なリレーショナル構造よりも遅くなるはずですが、その違いは意味がないかもしれません。
個人的には、パフォーマンスの問題を無視していても、リレーショナルストレージアプローチをお勧めします。これにより、他の人がデータとやり取りしやすくなるからです。きちんとしたXPath式を書くよりもきちんとしたSQLを書くことができる開発者ははるかに多く、リレーショナルテーブルからレポートを生成できるクエリツールは、データベースに格納されたXMLからレポートを生成できるよりもはるかに多くあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加