我正在使用 pool
包将 Shiny 应用程序连接到相当大的 SQLite 数据库(3Gb,70M 行)。
我使用以下方法创建一个池:
pool <- dbPool(
drv = RSQLite::SQLite(),
dbname = "mydb.db")
一切都在本地完美运行,但是当我把它放在我的服务器上时(我使用的是运行 Shiny 服务器的 DigitalOcean Droplet),池在大约 15 秒后很快就会过期,无论我是否在应用程序上处于事件状态。
在我看到的日志中
Error in pool$fetch: This pool is no longer valid. Cannot fetch new objects.
我尝试在创建池时更改 idleTimeout
和 minSize
参数,但无济于事。
如何防止这种情况发生?有没有办法检查池是否仍然有效,如果不重新连接到数据库?
此外,如果有人能够提供一些关于为什么会发生这种情况的见解,那就太好了。
最佳答案
为了防止其他人遇到这个问题,我解决这个问题的方法是检查池连接的 valid
属性。所以我可以在查询前添加以下内容:
if (!conn$valid) # pool has expired
connect_to_db() # This re-connects to the DB
<do query>
这似乎已经解决了问题
关于r - dbPool 对象过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64239320/