- - PR -
DBのデータへのアクセス方法について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-28 16:56
初心者です。
サーブレットでDBに格納されているメッセージを 取得して表示しようと思っています。 毎度毎度DBへアクセスするのはパフォーマンスが落ちてしまうので 変わりの方法を考えなければなりません。 メッセージを取得するオブジェクトを作成して、そのオブジェクトを 使いまわそうと考えるとオブジェクトの生存期間がどのくらいなのかなど 懸念しなければならないことがたくさんあると思います。 どなたか有効な方法をご存知の方がいらっしゃいましたら ご教授ください。 | ||||
|
投稿日時: 2004-10-28 17:01
要件が曖昧すぎて具体的にどのような情報を求めているかわからないですね・・。
EntityBean や流行の Hibernate などの OR マッパーなどを検証されてはいかがでしょうか? | ||||
|
投稿日時: 2004-10-28 17:33
ほんとうにパフォーマンスが落ちるのでしょうか?
| ||||
|
投稿日時: 2004-10-28 17:38
落ちること前提でお願いします。 | ||||
|
投稿日時: 2004-10-28 18:02
HashMapとかにキャッシュすればどうですか。
キャッシュになければDBから取得してキャッシュします。 キャッシュにあれば、その値を取得します。 そんな感じにすれば、1つのキーに対して1度のDBアクセスで済みますよ。 >メッセージを取得するオブジェクトを作成して、そのオブジェクトを >使いまわそうと考えるとオブジェクトの生存期間がどのくらいなのかなど >懸念しなければならないことがたくさんあると思います。 Javaのインスタンスの生存期間は 参照がなくなって、GCされるまでです。(通常の参照の場合) 参照されている限り生存しつづけます。 | ||||
|
投稿日時: 2004-10-28 18:04
こんにちは。
では、 ・メッセージを定数に持つオブジェクトを作る →パフォーマンス高・更新大変 ・メッセージをファイルに持ち、毎回ファイルを読みにいくオブジェクトを作る →パフォーマンスそこそこ・更新もそこそこ どちらでもお好きなほうで。 DBに入れたメッセージの内容(更新頻度とか)にもよりますが、 DBの更新を即時に反映しないオブジェクトを作成する事は、危険であると思います。 そもそも即時性が必要ないメッセージなら、DBに入れておく必要もないわけで DBアクセスによるパフォーマンスが気になるのなら、上記のような方法が良いかなぁと # でも、本当に「ほんとうにパフォーマンスが落ちるのでしょうか? 」とは思いますけど | ||||
|
投稿日時: 2004-10-28 18:53
もしメッセージが通常は更新されないものでしたら、Javaクラスの属性にstatic finalで持たせてはどうですか?
そのクラスを作成する時にDBから取り出してくればいいだけでアプリケーションは一切メッセージを取得しにいかない・・・と。 システムのパフォーマンスダウンになるような設計は根本を変えたほうがいいのでは。 | ||||
|
投稿日時: 2004-10-28 20:34
皆さん意見を出してますが、私がやったことがあるのは、
とりあえずWebアプリ起動時にDBにアクセスしてデータを取得しておき、 それをMAPに格納したものをServletContextに登録、 DBを更新したら、専用サーブレットを実行して読み込みなおす、 (新しくMAPを作り、古いものと交換する) という感じです。 あとは、通常のServletアクセスとは別スレッドのクラスを実行して 定期的にDBにアクセスする、とかですかね。 ファイルならタイムスタンプを見て更新有無をチェックする、という方法もあります。 参考になれば。 ただ、皆さんおっしゃっている通り、毎回DBにアクセスするのが嫌なシステムならDBは使わないほうが良いですよ。障害点も増えますし。 コネクションをプールしといてDBにアクセスしてもパフォーマンスが気になるシステムって、相当大変ですよ。 初心者にはかなり厳しいんじゃ・・・・・・。 |
1