CSVインポートの処理方式について

ASTERIA Warpでこんなことできる?…と思うことなど、ご遠慮なく...(^_-)

CSVインポートの処理方式について

投稿記事by exceptionCatcher » 2013年10月31日(木) 12:42

お世話になります。先日からASTERIA WARPを触り始めた初心者です。
当面の課題として、「CSVによるDBへのインポートをASTERIA WARPを用いて行いたい」
と考えています。主なサーバ構成は、
ビジネスロジックの大半が実行される「APサーバ」、
ASTERIA WARPが動作する「ASTERIAサーバ」、
DBMSが動作する「DBサーバ」の構成です。
(「ASTERIAサーバ」を今回新たに導入予定です。ASTERIA WARPのバージョンは4.7.1です。)

これに関し、2点質問させてください。

<質問1>

インポートは次のようなイメージで行いたいと考えています。

(1)ブラウザからCSVをアップロードする。

(2)CSVファイル内容をチェックする。

(3)チェック結果をブラウザ画面にチェック結果画面として応答する。
上記(2)でOKの場合のみ「登録」ボタンが表示される。

(4)ブラウザ側で「登録」ボタンをクリックすると、
CSV内容をDBに登録する。

ということで、次の三つの処理方式を考えてみました。

【方式A】(FTP起動のフロー)
・ブラウザからCSVを直接アップロードするサーバは「APサーバ」とする。
・CSVのチェックを行うのも「APサーバ」とする。
・チェックOKとなったCSVは「APサーバ」内で保存させる。
・上記(4)で登録ボタンがクリックされた場合、「APサーバ」内に保存されているCSVを「ASTERIAサーバ」にFTP転送する。
・「ASTERIAサーバ」はFTP受信トリガでCSVをDBに登録する。

【方式B】(HTTP起動のフロー)
・ブラウザからCSVを直接アップロードするサーバは「ASTERIAサーバ」とする。
・CSVのチェックおよびそのブラウザへの結果通知も「ASTERIAサーバ」で行う。
・チェックOKとなったCSVは「ASTERIAサーバ」内で保存させる。
・上記(4)で登録ボタンがクリックされた場合、「ASTERIAサーバ」内に保存されているCSVをDBに登録する。
・ブラウザ側で「登録」ボタンクリック時、「ASTERIAサーバ」はCSVをDBに登録する。

【方式C】(HTTP起動のフロー)
・ブラウザからCSVを直接アップロードするサーバは「ASTERIAサーバ」とする。
・CSVのチェックは「ASTERIAサーバ」で行う。
・チェックOK時、CSVをDBに登録する。上記(3)のユーザーへの最終確認は割愛する。
・チェックNG時、ブラウザにエラー情報を通知する。

現状、「FTP起動とHTTP起動の実装難易度」「チェックエラー時の画面通知機能の実装難易度」
「現状の類似他サービスのインポート方式(CSV内容の最終確認をユーザーに行わせている)」等を
勘案すると、【方式A】が良いのかな、と考えているのですが、
この方式が本当に良いのか確信が持てずにいます。

ASTERIA WARPを始めたばかりで、的外れな質問かも知れませんが
【方式A】~【方式C】以外の方式も含め、
ブラウザからアップロードしたファイルをDBにインポートする場合、
「どのような方式での実装が好ましいか」について、アドバイスを頂ければと存じます。

<質問2>

例えばCSV内容のコード値チェック等では「APサーバ」内のプログラムにコード値が定義されています。
前述【方式B】【方式C】を選択すると、「ASTERIAサーバ」にもコード値情報等を定義することになります。
「ASTERIAサーバ」「APサーバ」両方に類似ビジネスロジックを定義することは、
ある程度はやむを得ないのかも知れませんが、そのあたりの対策(ビジネスロジックの重複定義を避ける方法等)について、
アドバイスを頂ければと存じます。

以上よろしくお願いします。
exceptionCatcher
 
記事: 2
登録日時: 2013年10月31日(木) 12:37

Re: CSVインポートの処理方式について

投稿記事by moog » 2013年11月01日(金) 12:24

<質問1>については、どれでもできそうな気はしますが、
ASTERIAでCSVを受け取った場合、一旦全てストリーム(メモリ)に格納されてしまうので、
大きなファイルだとOutOfMemoryを気にしておかないといけませんね。
また、<質問2>にあるように同じような処理がAPサーバー側に実装されていて重複を避けたいのであれば、
やはり【方式A】が一番いいかもしれません。

<質問2>については、コードがプログラムにハードコードされているのであればどうしようもないですね。
ただ、コード値がDBやCSVファイルに入っているのであればTable関数やTableDB関数を使って共用できるかもしれません。

始めたばかりのようですし、プロジェクト的に許されるのであれば、
ASTERIAが得意そうなところから始めてみる【方式A】がやはり一番いいかもしれないですね。
moog
 
記事: 56
登録日時: 2006年10月23日(月) 14:11

Re: CSVインポートの処理方式について

投稿記事by exceptionCatcher » 2013年11月04日(月) 11:56

moog様

お世話になります。早速のご回答ありがとうございます。

# コード値がDBやCSVファイルに入っているのであればTable関数やTableDB関数を使って共用できるかもしれません。

コード値は「PHP言語で作成された共通includeファイル」で定義されているので、ASTERIA側での参照は難しいです。
ただ、「ASTERIAが得意な分野・そうでない分野」「今後のアプリ開発方式」等を考えるうえで参考になりました。
貴重なアドバイスありがとうございました。

以上
exceptionCatcher
 
記事: 2
登録日時: 2013年10月31日(木) 12:37


Return to ビギナールーム

オンラインデータ

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

cron