2013-02-08 11 views
6

私はRパッケージを構築しています。その主な目的は、かなり複雑なSQLクエリを必要とする独自のデータベースを扱う苦労を抽象化することです。Rパッケージでデータベース接続を管理する方法

このように、Microsoft SQL Serverへの接続(odbcDriverConnectで取得)は、このパッケージの一定かつ重要な部分ですが、これを管理するにはどうすればうまくいかないのでしょうか?どのようにこれはR.

に実施されるべきである

私の現在の考えは以下のとおりです。

  1. ユーザーは、彼らは任意の関数を呼び出す前に、彼らは有効な接続を持っていることを確認してください。各関数は、渡さなければならないパラメータとしてconnectionを持っています。これはユーザに負担をかける。

  2. すべての機能で、毎回新しい接続を得るget.connection()を呼び出してください。古い接続は自然にタイムアウトすることが許されていますが、これは不適切な方法です。

  3. 上記と同じですが、毎回同じ接続が返されます。これは、R. autoReconnect=TRUEを介して接続がタイムアウトしてしまうのを防ぐことができないため、実行可能な提案ではないようです。また、私はさまざまな言語で使用したその他のトリックは効果がないようです。

Javaでは、おそらくDatabaseConnectionPoolに多数の接続が設定されていて、必要に応じて接続を取得して返すことになります。 autoReconnect=TRUEと指定すると、Javaでタイムアウトの問題が発生していないようです。

ご迷惑をおかけして申し訳ございません。

答えて

1

2番目のアプローチと3番目のアプローチのミックスは妥当な解決策であると思われます。つまり、毎回同じ接続を取得していますが、接続を返す前にcheck if it is still openedにアクセスしてください。

手動autoReconnect=TRUE

2

poolを実装しているかのようにそれは基本的には、データベースなどの接続をプールするためのRパッケージです。 githubパッケージを使用するのが賢明なら、https://github.com/rstudio/poolを見てください。必要に応じて接続を再利用または再作成します。

+0

「プール」は素晴らしいです! –

関連する問題