2016-06-25 2 views
0

私のサーバーは30秒ごとに、接続されているすべてのユーザーのGPS座標を取得します。これらの座標を受け取るたびに、これらをMySQLテーブルに格納/更新する必要があります。クライアントはWebソケットを使用してサーバーに接続するため、接続ごとに新しいオブジェクトとスレッドが作成されます。したがって、基本的に、すべてのクライアントはデータベースに対してJDBC接続を開いています。JDBC接続のオープン/クローズは、アプリケーションを維持するのではなく、維持するのが望ましいですか?

  1. は - 私の質問は、私は(がメモリ空間を節約するために)JDBCコネクションサーバは値を更新し、それが次の値を受信したとき、30秒後にそれを開くたびに閉じるべきでしょうか?

    それとも

  2. 私は(私は近い/ JDBCオープンは高価な操作あると聞きました)オープンJDBC接続を残すべきか?

+1

2.開いたままにします。 1.接続プールを使用します。最後に、3.接続をプールに戻すことを確認します。 –

+0

接続の頻繁な開閉の問題を避けるために、Hibernateを使用する方が効果的です。 Hibernateは内部的にオブジェクトのプールを作成するためです。また、Hibernateを使用する主な利点は、第1レベルと第2レベルのキャッシュです。これを使用すると、すべてのデータベーストランザクションを1つの接続で簡単に管理できます。 – Rish

+0

@ElliottFrisch「接続プールを使用する」と「プールに戻す」の両方が「開け続ける」ことと矛盾します。この混乱を解消する必要があります。 – EJP

答えて

2

それはあなたのサーバー側のコードと道あなたinsert/updateあなたのテーブルのアーキテクチャに依存します:

  • あなたが取引を作成するかどう維持でくださいあなたはこれをチェックすることができますか?または、あなたの接続はAutoCommit=trueですか?
  • バッチでいくつかの操作を行っているのですか、または異なる接続を使用して単一の操作を行っていますか?

最も効率的に公的に使用される方法は、合理的な数の初期接続で接続プールを作成することです。これは、接続を作成する高価な操作に役立ちます。したがって、サーバーの起動時にこの操作(接続プールの作成)を1回だけ実行しています。

次に、コードでリファクタリングして接続を作成し、プールからの接続を取得するように置き換える必要があります。その後、CRUD操作のために接続を使用した後、クローズ操作を閉じてプールに戻す必要があります。

ただし、接続の数が限られている小さなアプリケーションでは、接続のオープン/クローズ方法は関係ありません。しかし、管理された接続プールを持つことは、大規模なエンタープライズアプリケーションの設計と実装において非常に重要なステップです。 Tomcatのあなたが聞かせできるように、サーバーアプリケーションは、Webサーバによって管理され、実行される場合も

Java Database Connection Pooling

How to set up a MySQL connection pool in Java

あなたはこれらの例を使用して接続プールの独自の方法を実装することができますあなたのために接続プールを作成して管理するtomcatハンドル。ちょうどdatasourceをtomcatに定義する必要があります。これは参考になる

Connection Pooling in a Java Web Application with Tomcat

希望:このチュートリアルを参照してください。

+0

接続プール**からの接続を使用した後は、プールに接続を返すため**接続プール**を閉じる必要があります。私はそれを反映するためにあなたの答えを編集しました。 –

+0

@MarkRotteveel:私を訂正してくれてありがとう。 – STaefi

1

システムに大量のユーザーが接続すると、開閉と接続の両方が高価で、多くのメモリが必要です。ユーザーあたりの各接続は冗長です。私はあなたが接続プールを探していると思います。 http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

関連する問題