ダウンロード
Magazine
開発
アカウント
ダウンロード
Magazine
開発
ログイン
アカウント/パスワードを忘れた
アカウント作成
言語
ヘルプ
言語
ヘルプ
×
ログイン
ログイン名
パスワード
×
アカウント/パスワードを忘れた
日本語の翻訳状況
カテゴリ:
ソフトウェア
人物
PersonalForge
Magazine
Wiki
検索
OSDN
>
ソフトウェアを探す
>
システム
>
TERASOLUNA Framework
>
フォーラム
>
公開討議
>
TERASOLUNA Batchを利用したファイル入出力の実現方法について
TERASOLUNA Framework
概要
プロジェクト概要
開発ダッシュボード
Webページ
開発メンバー
画像ギャラリー
公開フィード一覧
活動
統計情報
活動履歴
検索キーワード
プロジェクトレビュー
ダウンロード
リリース一覧
統計
ソースコード
コードリポジトリリスト
Subversion
リポジトリ閲覧
チケット
チケット一覧
マイルストーン一覧
チケットの種類一覧
コンポーネント一覧
よく使われるチケット一覧のリスト/RSS
新規チケット登録
文書
Wiki
FrontPageの表示
ページ一覧
最近の更新
文書マネージャ
文書一覧
コミュニケーション
フォーラム
フォーラム一覧
公開討議 (1265)
メーリングリスト
MLの一覧
terasoluna-information
ニュース
フォーラム:
公開討議
(スレッド #37055)
話題(スレッド)一覧に戻る
RSS
TERASOLUNA Batchを利用したファイル入出力の実現方法について (2015-08-13 20:39 by
TERASOLUNAの入門者
#76733)
返信
チケットに引用
お世話になります。
TERASOLUNA Batchを利用して以下のような
処理を実現したいと考えておりますが実現
は可能でしょうか。
1.ファイルA、ファイルBを読み込む
2.読み込んだファイルAの情報を元にファイルBを更新する
3.2で更新したファイルBを出力する。
複数ファイルを持回る方法、また入力したファイルに
対して出力を行う方法が分からず苦慮しております。
実現方法をご存じのかたがいらっしゃいましたら
ご教示お願い致します。
何卒、宜しくお願い致します。
メッセージ #76733 への返信
×
題名
本文
メッセージ #76733 への返信 > お世話になります。 > > TERASOLUNA Batchを利用して以下のような > 処理を実現したいと考えておりますが実現 > は可能でしょうか。 > > 1.ファイルA、ファイルBを読み込む > 2.読み込んだファイルAの情報を元にファイルBを更新する > 3.2で更新したファイルBを出力する。 > > 複数ファイルを持回る方法、また入力したファイルに > 対して出力を行う方法が分からず苦慮しております。 > > 実現方法をご存じのかたがいらっしゃいましたら > ご教示お願い致します。 > > 何卒、宜しくお願い致します。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
Re: TERASOLUNA Batchを利用したファイル入出力の実現方法について (2015-08-18 18:09 by
tajirim
#76761)
返信
チケットに引用
[メッセージ #76733 への返信]
> 1.ファイルA、ファイルBを読み込む
> 2.読み込んだファイルAの情報を元にファイルBを更新する
> 3.2で更新したファイルBを出力する。
> 複数ファイルを持回る方法、また入力したファイルに
> 対して出力を行う方法が分からず苦慮しております。
ファイルBのフォーマットやエラー時のリカバリ方法にもよりますが、
方法は大きく2通りあります。
※Batch3を前提として回答しています。
<方法A: ファイルBをDBに取り込み、更新後、ファイルに出力する>
1. 前処理として、ファイルBをDBに取り込む。
2. 主処理として、ファイルAのレコードごとに、DBを更新する。
(コレクタでファイルAを開いて、レコード数分実行されるところでDBを更新する)
3. ファイルAのレコードが無くなったら、後処理として、DBで更新済みの情報をファイルBに出力する。
<方法B: ファイルBをランダムアクセスで直接更新する>
前提条件:
・ファイルBは固定長フォーマットである。
・ジョブが途中で異常終了した場合、ファイルBが中途半端に更新された状態であってもよい。
1. 前処理として、java.io.RandomAccessFileを用いて、ファイルBを読み書きモードで開き、
一旦最初から最後まで読み、レコードを特定するための主キーの値と、
ファイル上の位置(RandomAccessFile#seekに渡すlong値)を対応づけて、
HashMap等に保持しておく。
(ファイルAのレコードを処理するたびにファイルBの更新位置を探していると、
無駄に時間がかかってしまうため、
主キーの値とファイルB内のレコードの先頭位置をマッピングしておき、
レコードの先頭位置+定数で、更新位置が決定できるようにする。)
2. 主処理として、ファイルAのレコードごとに、ファイルBを更新する。
(前処理でファイルBを開いたRandomAccessFileを利用する。)
3. ファイルAのレコードが無くなったら、後処理として、ファイルBを開いたRandomAccessFileをcloseする。
※「前処理」はコレクタのループより上、
「主処理」はコレクタのループ内、
「後処理」はコレクタのループより下に配置する処理を意図しています。
方法Bは、文字通り、ファイルBを入力かつ出力ファイルにする方法で、DBは不要なのですが、
方法Aの方が汎用的です。
#76733
への返信
メッセージ #76761 への返信
×
題名
本文
メッセージ #76761 への返信 > [メッセージ #76733 への返信] > > 1.ファイルA、ファイルBを読み込む > > 2.読み込んだファイルAの情報を元にファイルBを更新する > > 3.2で更新したファイルBを出力する。 > > 複数ファイルを持回る方法、また入力したファイルに > > 対して出力を行う方法が分からず苦慮しております。 > > ファイルBのフォーマットやエラー時のリカバリ方法にもよりますが、 > 方法は大きく2通りあります。 > ※Batch3を前提として回答しています。 > > <方法A: ファイルBをDBに取り込み、更新後、ファイルに出力する> > 1. 前処理として、ファイルBをDBに取り込む。 > 2. 主処理として、ファイルAのレコードごとに、DBを更新する。 > (コレクタでファイルAを開いて、レコード数分実行されるところでDBを更新する) > 3. ファイルAのレコードが無くなったら、後処理として、DBで更新済みの情報をファイルBに出力する。 > > <方法B: ファイルBをランダムアクセスで直接更新する> > 前提条件: > ・ファイルBは固定長フォーマットである。 > ・ジョブが途中で異常終了した場合、ファイルBが中途半端に更新された状態であってもよい。 > 1. 前処理として、java.io.RandomAccessFileを用いて、ファイルBを読み書きモードで開き、 > 一旦最初から最後まで読み、レコードを特定するための主キーの値と、 > ファイル上の位置(RandomAccessFile#seekに渡すlong値)を対応づけて、 > HashMap等に保持しておく。 > (ファイルAのレコードを処理するたびにファイルBの更新位置を探していると、 > 無駄に時間がかかってしまうため、 > 主キーの値とファイルB内のレコードの先頭位置をマッピングしておき、 > レコードの先頭位置+定数で、更新位置が決定できるようにする。) > 2. 主処理として、ファイルAのレコードごとに、ファイルBを更新する。 > (前処理でファイルBを開いたRandomAccessFileを利用する。) > 3. ファイルAのレコードが無くなったら、後処理として、ファイルBを開いたRandomAccessFileをcloseする。 > > ※「前処理」はコレクタのループより上、 > 「主処理」はコレクタのループ内、 > 「後処理」はコレクタのループより下に配置する処理を意図しています。 > > 方法Bは、文字通り、ファイルBを入力かつ出力ファイルにする方法で、DBは不要なのですが、 > 方法Aの方が汎用的です。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
Re: TERASOLUNA Batchを利用したファイル入出力の実現方法について (2015-08-19 18:15 by
TERASOLUNAの入門者
#76764)
返信
チケットに引用
ご回答ありがとうございました。
今回の開発の前提条件として、DBへのアップロードについて
はコマンドを使用して一括で実行することとなっておりレコード
ごとの更新は行えない方針となっております。
そのため、DBデータをCSV形式で出力し、CSVファイルとして更新
を実行する必要があるため残念ながらご提示いただいた処理方式
を採用することは難しくなっています。
またファイル自体も可変長のファイルとなってしまうため方法Bを
使用した処理方式についても採用ができません。
前提条件の記述をせずに質問をしてしまい申し訳ありませんでした。
処理内容について再度検討し、処理を細かく分割することでファイルと
DBを合わせた形で処理を行えるよう検討したいと思います。
#76761
への返信
メッセージ #76764 への返信
×
題名
本文
メッセージ #76764 への返信 > ご回答ありがとうございました。 > > 今回の開発の前提条件として、DBへのアップロードについて > はコマンドを使用して一括で実行することとなっておりレコード > ごとの更新は行えない方針となっております。 > > そのため、DBデータをCSV形式で出力し、CSVファイルとして更新 > を実行する必要があるため残念ながらご提示いただいた処理方式 > を採用することは難しくなっています。 > > またファイル自体も可変長のファイルとなってしまうため方法Bを > 使用した処理方式についても採用ができません。 > > 前提条件の記述をせずに質問をしてしまい申し訳ありませんでした。 > > 処理内容について再度検討し、処理を細かく分割することでファイルと > DBを合わせた形で処理を行えるよう検討したいと思います。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル