5

大量のデータをバッチで処理する非常に大きな XML ファイル (700 MB 以上) を作成しています。このプログラムは、非常に大規模な sybase データベースとアプリケーションの間のインターフェイスとして機能します。現在、xsd スキーマをクラスにバインドしています。再起動ロジックを念頭に置いて XML を記述できる方法が必要です。

IE は、中断した場所を知ることができます。つまり、プログラムが失敗した場合、最後に XML ファイルに書き込まれた内容を確認して、中断したところから再開できるようにする必要があります。これが例です。

<root>
  <WorkSet>
    <Work>
      <Customer>
    <Work>
      <Customer>
  <WorkSet>
    <Work>
      .....
<root>

write 'work' または 'workset' ノードを書き込んだ後にプログラムが失敗したとします。処理を中断したところから再開する方法はありますか? XML ファイルのせん断サイズが原因で、XML ファイルをメモリに読み戻さないようにしています (500 MB の XML を終了して失敗するとします)。

助けてくれてありがとう。

4

2 に答える 2

3

データを独立した WorkSet 要素に分割できる場合は、JAXB のフラグメント モードで一度に 1 つずつ書き出すことができます (JAXB がヘッダーを書き込まない場合)。後で単純にファイルを連結し、欠落している XML 宣言を追加して、開始終了タグを終了します。

このために生成されたクラスを変更する必要がある可能性があります。@XmlRootElementつまり、WorkSet Java クラスに追加するということです。1 つの WorkSet が 1 つのステップに対してまだ大きい場合は、Work でもこれを行うことができますが、不足しているタグを何らかの方法で生成する必要があります。

于 2011-09-13T20:11:38.673 に答える
2

JAXB がこの仕事に適したツールだとは思いませんが...

マーシャリングされたオブジェクトを追跡するカスタム マーシャラー実装を作成し、フラグメント モードを使用して個々のオブジェクトを書き出すことができます。

于 2011-09-13T18:15:38.413 に答える