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

Sql server 如何管理R包中的数据库连接,sql-server,r,rodbc,Sql Server,R,Rodbc,我正在构建一个R包,它的主要目的是抽象出处理专有数据库的痛苦,该数据库需要一些相当复杂的SQL查询才能获取数据 因此,与Microsoft SQL Server的连接(通过odbcDriverConnect获得)是这个软件包中一个固定且重要的部分,但我不知道如何最好地管理它,我希望得到关于如何在R中实现这一点的建议 我目前的想法是: 在用户调用任何函数之前,请确保他们拥有有效的连接。然后,每个函数都将连接作为必须传递的参数。这给用户带来了负担 在每个函数中,调用get.connection(),

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

因此,与Microsoft SQL Server的连接(通过
odbcDriverConnect
获得)是这个软件包中一个固定且重要的部分,但我不知道如何最好地管理它,我希望得到关于如何在R中实现这一点的建议

我目前的想法是:

  • 在用户调用任何函数之前,请确保他们拥有有效的连接。然后,每个函数都将连接作为必须传递的参数。这给用户带来了负担

  • 在每个函数中,调用
    get.connection()
    ,每次都会获得新的连接。然后允许旧连接自然超时,这似乎是一种草率的方法

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

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


    非常感谢您的建议。

    第二种和第三种方法的混合似乎是一种合理的解决方案,即每次都获得相同的连接,但是在返回连接之前,您可以创建一个新的连接


    基本上就好像您正在手动实现
    autoReconnect=TRUE

    pool
    是一个用于连接池(如数据库)的R包。如果您对使用github软件包很感兴趣,请看一看。将根据需要重用或重新创建连接