- - PR -
WebアプリケーションでPostgreSQLにバイナリデータ格納
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-12-17 15:04
Servlet/JSPでWebアプリケーションを作成しています。
クライアントのブラウザの入力フォームよりローカルファイル(バイナリ)を 指定して、サーバのPostgreSQLに挿入したいのですが、色々探してみても方法 がわかりませんでした。ご存知の方いましたらご教授お願いします。また、参考 になるサイト等ありましたら教えてください。 サーバ構成は、 OS:Red Hat Linux 9 アプリケーションサーバ:JBOSS3.2.2(Tomcatバンドル版) データベース です。 | ||||
|
投稿日時: 2003-12-17 15:21
ども。がると申します。
なんとなく、最近同じような質問に回答していたような気が するのですが^^; ちと変則技ですが。 Base64という方式でバイナリをエンコードすると、普通に 文字列になります。 サイズが約4/3倍になりますが、DBMSを選ばない手法なので 便利ですよ。 | ||||
|
投稿日時: 2003-12-17 15:39
状況を整理してみましょう。 この要求は、
という風に分解されますね。 まず、1に関しては「Servlet」、「ファイルアップロード」といったキーワードで検索 (別に@ITだけじゃないです。Googleとかで良いですよ)をしてみましょう。 2に関しては、基本的にデータベースには依らないことだと思いますので、「JDBC」や 「BLOB」というキーワードで検索してみましょう 実際に両方ともGoogleで検索しましたが、1位もしくは上位にかなり良さそうなページが ヒットしますよ。あとは、そこで調べて頑張りましょう もしそれらの解説を読んで試してみても分からないところがあれば、その時はまた ここに聞きに来たら良いと思います。まずは、試してみましょうね。 | ||||
|
投稿日時: 2003-12-17 16:34
がるがるさん、おばけさん、ありがとうございます。
がるがるさんへ >Base64という方式で... なるほど、4/3程度ならこの方法は色々なところで活用できそうですね。 おばけさんへ ありがとうございます。試してみます。 1.2.という手順でやれば出来るなぁ、とは思っていたのですが、1.で一度 ファイルをサーバ上に保存してやるのか、またはファイルに保存する前のストリ ームをDBに書き込むようにすれば良いのか?このあたりの、やり方というかセオ リーみたいなものがあれば、参考にしたいという事だったのです。説明不足です いません。まずは、試してみます。 | ||||
|
投稿日時: 2003-12-17 16:47
なるほど。そう言うことでしたか。 まず、テンポラリファイルに保存する方法では、以下の問題に気を配る必要が あるでしょう。
お掃除はDBへの書き込み後に行いますが、コンテナがまるごと死んだ場合等も 考えると、どこかでバッチを使ってお掃除する必要があります。 また、実行に当たっては当然十分なテンポラリDISK領域を確保する必要が あります。ここは、同時実行数×テンポラリファイルサイズで求まりますね。 他にも、ファイルI/Oを伴いますので、その分のパフォーマンス劣化はあるでしょう。 また、ファイル数が膨大な場合は、1プロセス当たりオープンできるファイル記述子 の数にも気をつけなければなりません。 他方、テンポラリファイルを用いない場合、オンメモリで処理するので以下の問題に 気をつけないといけません。
特に、Javaの場合Windows上ではJVM一つ当たりのヒープがせいぜい使えて900MB程度 ですから、かなり深刻です。また、ヒープサイズを増大させると、FullGC時の パフォーマンス劣化も問題です。 まあ、どちらが良いとは言えませんが、上記の点に考慮してオンメモリかテンポラリ ファイルかを選ばれると良いでしょうね。 私なら、あまり頻繁でなく(つまり同時に幾つも処理が起こる可能性が低い)、かつ ファイルサイズが小さい(数KB〜数十KB程度)なら、オンメモリで処理しますね。 テンポラリファイルのお掃除は面倒ですからね。 | ||||
|
投稿日時: 2003-12-17 16:56
おばけさん、詳しい説明をありがとうございます!
非常に参考になりました。おばけさんの言う、 >あまり頻繁でなく(つまり同時に幾つも処理が起こる可能性が低い)、かつ >ファイルサイズが小さい(数KB〜数十KB程度) というケースに一致しますので、この方法で実装にチャレンジしてみます。 ありがとうございました。 | ||||
1
