- - PR -
Webプロジェクトでのデータベースオープンについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-01 23:19
若干異なる観点から。
Webアプリケーションなど、複数のユーザが掃除に処理を行うような環境では、 何かを共有しようかと考える際に、その共有するリソースが本当に共有できる ものなのかを、まず考える必要があります。 ・そのインスタンスを複数のスレッド(ユーザと思ってもいいです)が、 本当に同時に使用しても安全なのか。 ・安全であったとして、本当にそれは効率的なのか。 ・効率的だったとして、処理の意味上それは正しい動作となるのか これらは、根本的にスレッドセーフに実装されているのか、 仮にスレッドセーフだとしてそのような使い方で性能を発揮できる設計になっているのか、 性能を発揮できるとして、その動作は本当に正しいものなのか、 というようなことです。 DBのコネクション系のクラスは基本的にスレッドセーフではありません。 もうこの時点でアウトです(自分で同期しない限り)。 仮にスレッドセーフだったとして、その方法がたとえば全部のメソッドがlockで 同期される実装だったとしましょう。これは、スレッドセーフではあっても、 多くの場合あまり同時処理の性能が発揮できる想定のつくりではないでしょう。 仮に性能は良好だったとして、複数の接続で使用するトランザクションは どのように切り分けられるでしょうか? もちろん正しく動作するようにトランザクションを独立で使用できる実装も ありえるでしょうが、そうでなければ正しくトランザクションを扱えません。 で、いろいろなことを考えると、Webアプリケーションのようなもので何かを 共有しようとする場合、結構慎重になる必要があることがわかります。 この辺をしっかり考慮する自信がなければ、下手なことはしないほうが無難、 ということになります。 ※特にマルチスレッドがらみの不具合は気づきにくい&原因究明が困難なので、 はまってしまうと痛い目にあいます。 | ||||
|
投稿日時: 2007-06-11 12:34
返事おくれました。
みなさん回答ありがとうございます。 DIM宣言して、毎回開いて閉じてを繰り返すのは・・??と思っていまして、 Publicで宣言したものだと、一度開いておけば異なるパソコンでも接続できたので、 そのほうがよいのかなとも思っていました。 (更新のときは別のConnectionをDIM宣言して使用していました。) ただ指摘にもあるように、多数のアクセスの場合大丈夫なのか?とか 基本的にこの方法だとCloseはしないで使用していることになるので、 あまりよくないのでは?とも思ってました。 アドバイスをまとめるとDIM宣言で開いて閉じてをやるほうが無難そうですね。。。 ありがとうございました。 | ||||
|
投稿日時: 2007-06-11 13:42
こんにちは
納得しているところを蒸し返すようで申し訳ないのですが、おっしゃる通り多数のアクセスの場合に何か起こりそうな予感がします。 それを解消する為の技術がコネクションプーリングなので、どちらにしてもプーリング導入を検討した方が幸せになれるかもしれません。 コネクションプーリングで検索すると有益な情報がたくさん出てきますので、是非御一考ください。 |