下載
軟體開發
帳戶
下載
軟體開發
登入
我忘記帳戶名和密碼了
新增帳戶
語言
手冊
語言
手冊
×
登入
登入名稱
密碼
×
我忘記帳戶名和密碼了
繁體中文翻譯狀態
類別:
軟體
人
PersonalForge
Magazine
Wiki
搜尋
OSDN
>
軟體搜索
>
System
>
TERASOLUNA Framework
>
討論區
>
公開討論
>
【バッチFW】バッチ(非同期型)の設計にあたって
TERASOLUNA Framework
描述
專案概要
開發人員儀表板
專案的網頁
Developers
Image Gallery
List of RSS Feeds
活動
使用統計
歷史
檔案下載
發布列表
Stats
原始碼
儲存庫列表
Subversion
查看儲存庫
待辦事項
待辦事項列表
里程碑列表
類型列表
元件列表
List of frequently used tickets/RSS
新增待辦事項
文檔
Wiki
FrontPage
Title index
Recent changes
Doc Mgr
List Docs
溝通
討論區
討論區列表
公開討論 (1277)
通信論壇
通信論壇列表
terasoluna-information
新聞
討論區:
公開討論
(Thread #21653)
Return to Thread list
RSS
【バッチFW】バッチ(非同期型)の設計にあたって (2009-02-13 15:00 by
匿名
#41835)
回覆
Create ticket
非同期型ジョブでのバッチの設計にあたって、アドバイスいただければと思います。
【バッチ処理概要】
複数の支店(それぞれにデータベース有)からデータを取得。
本社のデータベースにすべての支店の取得データを一括でインサートする。
【質問】
①一つのバッチ処理で複数のデータベースから入力データを取得(コレクタ)することは可能でしょうか?
それとも、支店の数だけバッチを作成する必要があるのか、または、一つのバッチで処理する場合には同期実行で支店コードをパラメータとして渡し、順番に実行していくしかないのでしょうか?
②一つのバッチで非同期処理可能な場合、どのような組み立てが可能でしょうか?
機能説明書は読んだのですが、質問部分についての項目が不明(読み落としかもしれません)でした。
どうぞよろしくお願いします。
回覆 #41835
×
主題
內容
Reply To Message #41835 > 非同期型ジョブでのバッチの設計にあたって、アドバイスいただければと思います。 > > 【バッチ処理概要】 > 複数の支店(それぞれにデータベース有)からデータを取得。 > 本社のデータベースにすべての支店の取得データを一括でインサートする。 > > 【質問】 > ①一つのバッチ処理で複数のデータベースから入力データを取得(コレクタ)することは可能でしょうか? > それとも、支店の数だけバッチを作成する必要があるのか、または、一つのバッチで処理する場合には同期実行で支店コードをパラメータとして渡し、順番に実行していくしかないのでしょうか? > ②一つのバッチで非同期処理可能な場合、どのような組み立てが可能でしょうか? > > 機能説明書は読んだのですが、質問部分についての項目が不明(読み落としかもしれません)でした。 > > どうぞよろしくお願いします。 > >
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
登入
Nickname
預覽
Post
取消
RE: 【バッチFW】バッチ(非同期型)の設計にあたって (2009-02-13 18:09 by
kuramotoki
#41837)
回覆
Create ticket
いただいた質問についてですが、プロジェクトの1バッチ処理の粒度にも関係する内容ですが、
ジョブの個数が膨大で登録しきれない、もしくはマシンリソースを抑える必要があるなど
特別な理由がないならば、支店ごとにジョブを分割し実行していくのが素直な実装のように感じます。
理由は、処理エラー時の対処が複雑になってしまうためです。
以下、個々の質問について回答します。
①について
> 一つのバッチ処理で複数のデータベースから入力データを取得(コレクタ)することは可能でしょうか?
FWデフォルトの実装は、単一のデータソースから取得処理をするようになっているため、
複数のデータベースから取得する場合は、複数のデータソースから取得処理するように
コレクタを自作する必要があります。
ジョブ実装の際にFWの分割実行を使わない場合は、1つのコレクタの中で
逐次複数データソースからデータを集めていくことになりますが、
並列に処理が動かないので性能要件を満たせるか状況次第かと思います。
またデータ取得の順序性なども考慮する必要があるでしょう。
分割実行を使う際は、ジョブコンテキストにどのデータソース(どのDAO)を使うかの情報を与え、
すべてのDAOをDIしておいてどれを利用するか子ジョブ毎に決定する、または
DIコンテナを参照できるようにしておいてgetBeanするなど、
方法はあると思いますが、処理・制御が複雑になるのでお奨めしません。
> 支店の数だけバッチを作成する必要があるのか、または、
> 一つのバッチで処理する場合には同期実行で支店コードをパラメータとして渡し、順番に実行していくしかないのでしょうか?
処理内容によります。
パラメータで処理対象を動的に切り替えて実行すればよいのであれば
そのようにした方が楽かと思います。
その際に、1支店ごとに逐次実行する必要があるのか、複数支店を並列実行できるのかは状況次第ですが、
並列処理をするのであればデータベースの競合が起きないようにお気をつけ下さい。
また、上記の処理は同期/非同期どちらでも実行することができます。
②について
> 一つのバッチで非同期処理可能な場合、どのような組み立てが可能でしょうか?
1つのバッチの意図がうまく汲み取れているか自信がありませんが、
1バッチで全ての支店を処理するという意味であれば、
デーモンをあらかじめ常駐させておき、
ジョブ自体はパラメータで処理対象を切り替える形式にしておき、
その1バッチの中で
・実行したいジョブをすべてジョブ管理テーブルに登録する
・デーモンがすべてのジョブを処理するまで待つ(管理テーブルをポーリングするなど)
とすれば、おっしゃる形に近いかと思います。
冒頭に述べたとおり、可能であればスケジュールバッチとして設計した方が
素直で管理しやすいかと思います。
長文失礼しました。以上です。
回覆:
#41835
回覆 #41837
×
主題
內容
Reply To Message #41837 > いただいた質問についてですが、プロジェクトの1バッチ処理の粒度にも関係する内容ですが、 > ジョブの個数が膨大で登録しきれない、もしくはマシンリソースを抑える必要があるなど > 特別な理由がないならば、支店ごとにジョブを分割し実行していくのが素直な実装のように感じます。 > 理由は、処理エラー時の対処が複雑になってしまうためです。 > > 以下、個々の質問について回答します。 > ①について > > 一つのバッチ処理で複数のデータベースから入力データを取得(コレクタ)することは可能でしょうか? > FWデフォルトの実装は、単一のデータソースから取得処理をするようになっているため、 > 複数のデータベースから取得する場合は、複数のデータソースから取得処理するように > コレクタを自作する必要があります。 > > ジョブ実装の際にFWの分割実行を使わない場合は、1つのコレクタの中で > 逐次複数データソースからデータを集めていくことになりますが、 > 並列に処理が動かないので性能要件を満たせるか状況次第かと思います。 > またデータ取得の順序性なども考慮する必要があるでしょう。 > > 分割実行を使う際は、ジョブコンテキストにどのデータソース(どのDAO)を使うかの情報を与え、 > すべてのDAOをDIしておいてどれを利用するか子ジョブ毎に決定する、または > DIコンテナを参照できるようにしておいてgetBeanするなど、 > 方法はあると思いますが、処理・制御が複雑になるのでお奨めしません。 > > > 支店の数だけバッチを作成する必要があるのか、または、 > > 一つのバッチで処理する場合には同期実行で支店コードをパラメータとして渡し、順番に実行していくしかないのでしょうか? > 処理内容によります。 > パラメータで処理対象を動的に切り替えて実行すればよいのであれば > そのようにした方が楽かと思います。 > その際に、1支店ごとに逐次実行する必要があるのか、複数支店を並列実行できるのかは状況次第ですが、 > 並列処理をするのであればデータベースの競合が起きないようにお気をつけ下さい。 > > また、上記の処理は同期/非同期どちらでも実行することができます。 > > ②について > > 一つのバッチで非同期処理可能な場合、どのような組み立てが可能でしょうか? > 1つのバッチの意図がうまく汲み取れているか自信がありませんが、 > 1バッチで全ての支店を処理するという意味であれば、 > デーモンをあらかじめ常駐させておき、 > ジョブ自体はパラメータで処理対象を切り替える形式にしておき、 > その1バッチの中で > ・実行したいジョブをすべてジョブ管理テーブルに登録する > ・デーモンがすべてのジョブを処理するまで待つ(管理テーブルをポーリングするなど) > とすれば、おっしゃる形に近いかと思います。 > > 冒頭に述べたとおり、可能であればスケジュールバッチとして設計した方が > 素直で管理しやすいかと思います。 > > 長文失礼しました。以上です。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
登入
Nickname
預覽
Post
取消
RE: 【バッチFW】バッチ(非同期型)の設計にあたって (2009-02-13 18:33 by
匿名
#41838)
回覆
Create ticket
kuramotokiさま
早々にアドバイスいただきましてありがとうございました。
内容を吟味して、より環境に見合った形に作り上げていきたいと思います。
作り上げていく中で不明な点があった場合には再度質問させていただきたいと思います。
どうぞよろしくお願いします。
回覆:
#41835
回覆 #41838
×
主題
內容
Reply To Message #41838 > kuramotokiさま > > 早々にアドバイスいただきましてありがとうございました。 > 内容を吟味して、より環境に見合った形に作り上げていきたいと思います。 > > 作り上げていく中で不明な点があった場合には再度質問させていただきたいと思います。 > どうぞよろしくお願いします。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
登入
Nickname
預覽
Post
取消