- PR -

DBのデータへのアクセス方法について

1
投稿者投稿内容
hogest
会議室デビュー日: 2004/10/22
投稿数: 8
投稿日時: 2004-10-28 16:56
初心者です。

サーブレットでDBに格納されているメッセージを
取得して表示しようと思っています。
毎度毎度DBへアクセスするのはパフォーマンスが落ちてしまうので
変わりの方法を考えなければなりません。

メッセージを取得するオブジェクトを作成して、そのオブジェクトを
使いまわそうと考えるとオブジェクトの生存期間がどのくらいなのかなど
懸念しなければならないことがたくさんあると思います。

どなたか有効な方法をご存知の方がいらっしゃいましたら
ご教授ください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-10-28 17:01
要件が曖昧すぎて具体的にどのような情報を求めているかわからないですね・・。
EntityBean や流行の Hibernate などの OR マッパーなどを検証されてはいかがでしょうか?
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-10-28 17:33
ほんとうにパフォーマンスが落ちるのでしょうか?
hogest
会議室デビュー日: 2004/10/22
投稿数: 8
投稿日時: 2004-10-28 17:38
引用:

七味唐辛子さんの書き込み (2004-10-28 17:33) より:
ほんとうにパフォーマンスが落ちるのでしょうか?



落ちること前提でお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-10-28 18:02
HashMapとかにキャッシュすればどうですか。
キャッシュになければDBから取得してキャッシュします。
キャッシュにあれば、その値を取得します。
そんな感じにすれば、1つのキーに対して1度のDBアクセスで済みますよ。

>メッセージを取得するオブジェクトを作成して、そのオブジェクトを
>使いまわそうと考えるとオブジェクトの生存期間がどのくらいなのかなど
>懸念しなければならないことがたくさんあると思います。

Javaのインスタンスの生存期間は
参照がなくなって、GCされるまでです。(通常の参照の場合)
参照されている限り生存しつづけます。
BBC
常連さん
会議室デビュー日: 2002/03/15
投稿数: 37
お住まい・勤務地: 東京
投稿日時: 2004-10-28 18:04
こんにちは。

引用:

ニカさんの書込み(2004-10-28 17:38)より

落ちること前提でお願いします。



では、

・メッセージを定数に持つオブジェクトを作る
 →パフォーマンス高・更新大変
・メッセージをファイルに持ち、毎回ファイルを読みにいくオブジェクトを作る
 →パフォーマンスそこそこ・更新もそこそこ

どちらでもお好きなほうで。

DBに入れたメッセージの内容(更新頻度とか)にもよりますが、
DBの更新を即時に反映しないオブジェクトを作成する事は、危険であると思います。

そもそも即時性が必要ないメッセージなら、DBに入れておく必要もないわけで
DBアクセスによるパフォーマンスが気になるのなら、上記のような方法が良いかなぁと

# でも、本当に「ほんとうにパフォーマンスが落ちるのでしょうか? 」とは思いますけど
植村
会議室デビュー日: 2004/10/28
投稿数: 11
投稿日時: 2004-10-28 18:53
もしメッセージが通常は更新されないものでしたら、Javaクラスの属性にstatic finalで持たせてはどうですか?
そのクラスを作成する時にDBから取り出してくればいいだけでアプリケーションは一切メッセージを取得しにいかない・・・と。

システムのパフォーマンスダウンになるような設計は根本を変えたほうがいいのでは。
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-10-28 20:34
皆さん意見を出してますが、私がやったことがあるのは、
とりあえずWebアプリ起動時にDBにアクセスしてデータを取得しておき、
それをMAPに格納したものをServletContextに登録、
DBを更新したら、専用サーブレットを実行して読み込みなおす、
(新しくMAPを作り、古いものと交換する)
という感じです。

あとは、通常のServletアクセスとは別スレッドのクラスを実行して
定期的にDBにアクセスする、とかですかね。

ファイルならタイムスタンプを見て更新有無をチェックする、という方法もあります。

参考になれば。


ただ、皆さんおっしゃっている通り、毎回DBにアクセスするのが嫌なシステムならDBは使わないほうが良いですよ。障害点も増えますし。
コネクションをプールしといてDBにアクセスしてもパフォーマンスが気になるシステムって、相当大変ですよ。
初心者にはかなり厳しいんじゃ・・・・・・。
1

スキルアップ/キャリアアップ(JOB@IT)