- ベストアンサー
Oracle10gで同時接続数について
VB.NET + Oracle10gの開発(Windowsアプリ)にて Oracleへのクライアントの同時接続数が500あるのですが、 この環境の場合、APサーバーをたてるなどして、ハード的な階層を分ける必要があるのでしょうか? (APサーバーをたてる必要があるのでしょうか?) そもそも、500という数が、一般的に見て、多いのか、少ないのかも分かりませんが、各クライアントPCから直接接続するような仕組みでは、まずいのでしょうか?(通常のC/Sのように・・・) ご回答、よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
2階層のC/Sシステムは経験がありませんので詳しくないのですが、クライアントから直接APサーバーのDBコネクションプールは使えないと思います。 APサーバーを立てると3階層のC/Sシステムとなり、クライアントはビュー、APサーバーはロジック、DBサーバーはデータベースの機能分担になります。クライアントとAPサーバー間は、.NET Remotingなどでの通信となります。 2階層システムか3階層システムとするかは重大な決断になります。書籍の購入やコンサルの利用をお勧めします。 私の手元には次の書籍があります。 ・発行:日経SBソフトプレス ・Microsoft .NETによるエンタープライズソリューションパターン システム規模(クライアント数、トランザクション数)が判断するための重要なキーになります。 多くの人が使う場合は、VB.NETでの開発よりもWebシステムの方がシステム構成や開発方法の柔軟性が高いように思えます。
その他の回答 (2)
- syama2006
- ベストアンサー率38% (14/36)
APサーバーでコネクションをプールすればコネクション数をクライアント数よりも低減できます。 コネクションプール数がDBへの接続数となり、コネクションプールの上限を決めることでDBサーバーのメモリ量を決定できます。 「Oracle上に接続セッションの数が500ある」という状態は、接続されていることを意味しメモリを必要とします。 300同時接続のシステムでは数台のAPサーバーを立てました。システム起動時に業務アプリ実行用のプロセスを立ち上げ、各プロセス毎にDBコネクションを確立する手法を採っております。 新たなコネクションを確立する処理は非常に重いためこのように事前に確立するようにしております。 なお、複数台のAPサーバーを立てる場合は負荷分散機能やダウン切替なども考慮する必要が出てきます。 業務の重要度と開発費用を考慮して、システム設計を決めることが重要です。
お礼
ご回答ありがとうございます。 APサーバーをたてるということは、ハード的なアーキテクチャのみならず、アプリケーション自体も通常のC/Sのアプリとは、違った仕組みを採用する必要があるということになりますか? APサーバーをたててのシステム構築の経験がないので、よくわからないのですが、いわゆる、「n階層アプリケーション」のような、クライアントアプリから、リモートでオブジェクト同士をやりとりさせるような技術(XMLWebサービス、.NET Remoting等)が必要になるのでしょうか? 素人の質問になってしまいますが、そもそも、APサーバーを立てる場合のシステム構成では、クライアントから直接Oracleへ接続するようなつくりは、実現できないのでしょうか? ご回答、よろしくお願いします。
- syama2006
- ベストアンサー率38% (14/36)
Oracleの同時接続数500は非常に大きな接続数です。DBサーバーに大量のメモリを必要とします。500同時接続した場合のメモリ量をOracle社に問い合わせるのが良いと思います。 私は100TPSとかなり大きなシステムを設計して来ましたが、オンラインで300同時接続数が最大でした。これで数億円もする高価なシステムになりました。 システム設計では次のデータをまず必要とします。 ・利用するクライアント数 ・1秒間当たりの最大トランザクション数(クライアント数から算出) ・DBデータの競合する程度 ・開発する業務アプリの量 ・ハードを含めたシステム開発費用 また、開発効率を向上するために各種のフレームワークが公開されておりますので、気に入った物を選ぶのが良いと思います。VB.NETを対象としたフレームワークはあまり見かけませんが、Javaは多く出ております。 システム規模の拡大に対応するにはAPサーバーを立てたシステムとなります。
お礼
さっそくのご回答、ありがとうございます! やはり、同時接続500というのは、非常に大きい数ですか。。 さらに質問という形になってしまいますが、 同時接続という形ではなく、Oracle上に接続セッションの数が500あるという状態でも、同じようなことがいえるのでしょうか? つまり、クライアントからのコネクションが各クライアント上で、プールされているような状態です。 (個人的には、APサーバーを立てることによって、クライアントから直接接続するよりも、このコネクションプールの数、および、Oracle上の接続セッションをおさえることができると認識しているので・・・) ちなみに、syama2006さんは、300同時接続数のシステム構築の際には、APサーバーは、たてましたか? よろしくお願いします。
お礼
ご回答ありがとうございます! やはり、APサーバーを立てると、コンポーネント間での通信が必要になりますか。 私も個人的にAPサーバーを立てた3階層のC/Sシステムを調べてみたのですが、2階層の仕組みと比べて、パフォーマンスが落ちるといったような内容(オーバーヘッドが生じるため・・・)をいくつも目にしたものですから、安易に踏み切れない部分がありまして・・・ とくに、「XML Webサービス」は、パフォーマンスが低いと認識しています。やはり、ファイアーウォールを経由しないような、イントラ内のシステムでは、「.NET Remoting」を使用していますか? > 私の手元には次の書籍があります。 > ・発行:日経SBソフトプレス > ・Microsoft .NETによるエンタープライズソリューションパターン ご紹介ありがとうございます。参考にしてみます。 よろしくお願いします。