!!DBからDBへの大量データの取込処理!!

「ASTERIA WARP」「ASTERIA 3」「ASTERIA On Demand」の
インストール・動作環境・パイプライン機能・フロー機能など全般について

!!DBからDBへの大量データの取込処理!!

投稿記事by soukennbichaaa » 2018年6月19日(火) 17:38

お世話になっております。

大量データの取り扱いに関して質問です。
600万件ほどのデータ取込をASTRIAで行わなくてはなりません。
データ量は、約3000MBです。
下記のような取り込み処理を組んでいます。

[Select]-ループを開始(300件毎に取り込む)

[マッパー]

[Branch] < 0件の場合 > ⇒ [Break](ループ処理を抜ける)

[Insert]

[ループ終了](Selectに戻る)

上記処理で、Javaがheap errorを起こして落ちてしまいます。
既に下記URLは確認済です。

https://support.asteria.com/hc/ja/artic ... 4%E3%81%A6

現在、開発環境で動かしているので、他環境よりメモリが少ないのもあるかと思いますが、
管理コンソールで最大メモリサイズを2GBに設定しているようです。他環境は2~4倍のメモリサイズのようです。

上記のような処理で落ちないようにするにはどのような対処法がありますでしょうか。
Java、Asteria、大量データの扱いに詳しくないため、助言を頂ければと思います。

何卒よろしくお願い致します。
soukennbichaaa
 
記事: 12
登録日時: 2017年10月11日(水) 14:51

Re: !!DBからDBへの大量データの取込処理!!

投稿記事by arimitsu » 2018年6月20日(水) 18:47

こんにちは。
RDBでフェッチサイズが300なのでしょうか。
「フローサービスでのメモリ不足について」は確認したとのことですので、
まず[Insert]の部分の処理をやらないで、すべてのデータを取得してそのまま捨てるだけの動作が可能か確認してみてはいかがでしょうか。
以下のような場合もありますのでご確認ください。
RDBGetコンポーネントでMySQLを検索すると処理中にメモリ不足になります
arimitsu
 
記事: 34
登録日時: 2015年6月16日(火) 16:54

Re: !!DBからDBへの大量データの取込処理!!

投稿記事by soukennbichaaa » 2018年6月22日(金) 10:39

返信ありがとうございます。
後出しになりますが、DB環境はoracleです。

表題の大量データですが、無事落ちずに取り込めるような作りにできました。
やはりメモリの解放ができていなかったようで、下記の方法で解決しました。

[Select]-ループを開始(条件値を取得し、条件値ごとにループ)

[マッパー]-条件値をSubFlowに渡す

[SubFlow]
└【Select】-条件値を受け取り、データを取得
  ↓
 【マッパー】
  ↓
 【Insert】
  ↓
 【End】-コミット

[ループ終了](Selectに戻る)

Endコンポーネントでコミットしないとメモリは解放されないようなので、
ループの中でサブフローを呼んで条件値毎にInsertしてコミットする処理を
繰り返すように組んだら約600万件でもうまく取り込めました。

開始コンポーネントでトランザクション化を「いいえ」にしていたので
各コンポーネントごとにコミットされていると思っていましたが違うようですね。
あまり詳しくないので理解不足もありますが、上記方法ご参考にしていただければと思います。
soukennbichaaa
 
記事: 12
登録日時: 2017年10月11日(水) 14:51


Return to 聞きたい、知りたい、教えます

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[4人]

cron