如何管理R包中的数据库连接

时间:2013-02-08 19:24:13

标签: sql-server r rodbc

我正在构建一个R包,其主要目的是消除处理专有数据库的痛苦,该数据库需要一些相当复杂的SQL查询才能获取数据。

因此,与Microsoft SQL Server的连接(由odbcDriverConnect获得)是此包的一个不变且重要的部分,但我无法弄清楚如何最好地管理这个并且我希望关于如何在R中实施这一建议的建议。

我目前的想法是:

  1. 让用户在调用任何函数之前确保他们具有有效的连接。然后每个函数都有connection作为必须传递的参数。这给用户带来了负担。

  2. 在每个功能中,拨打get.connection(),每次都会获得新的连接。然后允许旧连接自然超时,这似乎是一种草率的方法。

  3. 如上所述,但每次都返回相同的连接。这似乎不是一个可行的主张,因为我不能阻止连接通过R. autoReconnect=TRUE超时,而我在不同语言中使用的其他技巧似乎没有效果。

  4. 在Java中,我可能会有一个DatabaseConnectionPool,其中填充了许多连接,只需从中获取连接,并根据需要将它们返回到该池。当我指定autoReconnect=TRUE时,我似乎也没有Java中的超时问题。

    任何建议都非常感谢。

2 个答案:

答案 0 :(得分:2)

pool是用于汇集数据库等连接的R包。如果您要使用github软件包,请查看https://github.com/rstudio/pool。将根据需要重用或重新创建连接。

答案 1 :(得分:1)

似乎第二种和第三种方法之间的混合是合理的解决方案,即每次都获得相同的连接,但是在返回连接之前,您可以check if it is still opened,否则创建新的连接。

基本上就像您手动实施autoReconnect=TRUE

一样