dbPool 对象到期

dbPool object expiring

我正在使用 pool 包将 Shiny 应用程序连接到相当大的 SQLite 数据库(3Gb,7000 万行)。

我使用以下方法创建池:

pool <- dbPool(
    drv = RSQLite::SQLite(),
    dbname = "mydb.db")

一切都在本地完美运行,但是当我把它放在我的服务器上时(我使用的是 DigitalOcean 液滴 运行 Shiny 服务器),无论我是否处于活动状态,池都会在大约 15 秒后很快过期在应用程序上。

在我看到的日志中

Error in pool$fetch: This pool is no longer valid. Cannot fetch new objects.

我尝试在创建池时更改 idleTimeoutminSize 参数,但无济于事。

我该如何防止这种情况发生?有没有办法检查池是否仍然有效,如果无效则重新连接到数据库?

此外,如果有人能就为什么会发生这种情况给出一些见解,那就太好了。

为了防止其他人遇到这个问题,我解决这个问题的方法是检查池连接的 valid 属性。所以我可以在查询前加上类似的东西:

if (!conn$valid) # pool has expired
   connect_to_db() # This re-connects to the DB
<do query>

这似乎解决了问题