2016-12-05 4 views
0

私は、securefileバイナリxmlとして保存されたxmltypeが最大4GBのファイルサイズを処理できることを理解します。大きなxmlドキュメントの処理

4GB xml以上のファイルを処理する良い方法があれば知っていますか?

+0

私はxmlに慣れていませんが、ループスルー、clobsize内のノードのチャンクを取り出し、それをチャンクに格納していると考えています。しかし、これらのファイルが潜在的に大きくなる可能性があると見ると、これには長い時間がかかります。 – Moptan

答えて

0

Oracleデータベースには、XMLTypeという大きなXMLファイルを格納しないでください。

OracleのXML機能のほとんどは、Document Object Model (DOM)をベースにしています。これは膨大な量のオーバーヘッドデータを含むXML文書全体をメモリにロードする必要があります。大きなマシンであっても、これはしばしばメモリリークや同様の問題を引き起こします。

このようなXMLをデータベースに入れるには、外部のストリームベースのサーバーを考慮する必要があります。イベントベースのXMLパーサー。SAX (Simple API for XML)とよく呼ばれます。ほぼすべてのプログラミング言語でSAXパーサを利用できます。 XMLの内容は通常のリレーショナルデータとして保存されます。このような大きなXMLをOracleデータベースから作成するには、「行単位」でCLOBに入力します。

見るPL/SQL APIs for XMLType

手続き処理のこのタイプは、Oracle XDK JavaやC成分中のSAXインタフェースを介して利用可能です。

通常、SAXパーサーを使用するときは、変更やクエリの要素を提供しないため、より多くのコードを記述する必要があります。その間、DOMベースのパーサのように強力なストリームベースのパーサ(例えば、Perl XML::Twig)が利用可能である。

+0

XMLを解析するとOracleデータベースで特にメモリリークが発生するというご意見はありますか? – MT0

+0

このファイルが見つかりました:[PL/SQL API for XMLType](https://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb10pls.htm#ADXDB1100):* Oracle Database 11gリリース1より前(11.1)では、Oracle XML DBによって処理される各テキスト・ノードまたは属性値のサイズは64KBに制限されていました。リリース11.1以降、この制限は適用されなくなりました。*アプリケーションを開発したのはかなり前ですが、その時点でこの制限が適用されていると仮定します。標準のDOMベースのパーサーが動作していないことを確認してください。 –

+0

そして、この1つ:[XML Parsing for Java](https://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm#ADXDK19112)*プログラムが大きなXML文書を解析し、 DOMツリーを使用すると、パフォーマンスに影響する可能性があります。*古いリリースの場合:[よくある質問(FAQ):PL/SQL用XMLパーサー](https://docs.oracle.com/cd/A91773_01/ids902dl/web) 902/a88894/adx28ppl.htm#1004621):* 50MbのXMLファイルを解析するためにDOMParserを使用するべきではありません。あなたは、ノードのメモリ内ツリーを作成しないので、任意のサイズのファイルを解析するSAXParserを見る必要があります。 –

関連する問題