11

RJDBC を介して MS SQL データベースへの SQL 接続を (再) 使用するためのベスト プラクティスを理解したいと思います。

次の 3 つのシナリオが考えられます。

  1. 接続をグローバル変数に保存し、一度初期化して、コード内のあらゆる場所で使用します
  2. リクエストごとに新しい接続を作成する
  3. より複雑なことを行います。たとえば、開いている接続のプールを事前設定し、必要に応じてプールからの接続を (再) 使用します。

私は数十のクライアントを持つ光沢のあるアプリケーションでコードを使用しています。方法 1 を使用すると何か問題が発生するのではないかと心配しています。そのため、方法 2 を使用して、以下のコードですべてのリクエストに対して新しい接続を作成します。

このアプローチには、パフォーマンス、データベース リソースへの負担など、いくつかの潜在的な欠点があることがわかります。

したがって、私の具体的な質問は次のとおりです。

A. 光沢のあるアプリケーション全体で、RJDBC を介して MS SQL データベースへの単一の接続を安全に使用できますか?

B. 上記のシナリオ 2 に実際の欠点 (メモリ リーク、パフォーマンスなど) はありますか?


NewConnection <- function() {
  file = NULL
    # make it work on three different OSes - Linux, MacOS, Windows 
    for (path in c('/Users/victor/Documents/R/sqljdbc_3.0/enu/sqljdbc4.jar',
          '/home/oracle/sqljdbc_3.0/enu/sqljdbc4.jar',
          'C:/Projects/jdbc/sqljdbc_4.0/enu/sqljdbc4.jar')) {
      if (file.exists(path)) {
        file = path
          break
      }
    }
  if (is.null(file))
    return(NULL)
  else {
    drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", file)
      passwd <- GetUserNamePassword()
      conn <- dbConnect(drv, "jdbc:sqlserver://sql.server.address.com", 
          passwd$username, passwd$password)
      return(conn)
  }
}

PS 関連: R パッケージでデータベース接続を管理する方法

4

2 に答える 2

1

たくさんの質問:

1) 接続を再利用する方が、使用するたびに新しい接続を確立するよりも高速です。コードによっては、これによりアプリケーションが少し高速化されます。ただし、接続の再利用はより複雑です。これが、多くの人が接続プールを使用する理由です。

2) プログラムのランタイムが短い場合は、1 つの接続 (グローバル変数など) で作業できます。アプリケーションがサーバー アプリケーション (長時間実行) の場合、サーバーが接続を閉じることができるため、接続を維持する必要があります。これは、サーバー アプリケーションで夜間に発生する可能性があります。接続メンテナンス機能は、接続プールの一部です。

概要。アプリケーションが単純で、マルチスレッドではなく、サーバーアプリケーションでもない場合は、単一の接続を再利用してください。それ以外の場合は、毎回新しい接続を使用するか、接続プールを使用します。

于 2013-11-20T21:53:02.827 に答える