r - dbPool 对象过期

标签 r sqlite shiny pool

我正在使用 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.

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

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

此外,如果有人能够提供一些关于为什么会发生这种情况的见解,那就太好了。

最佳答案

为了防止其他人遇到这个问题,我解决这个问题的方法是检查池连接的 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/

相关文章:

javascript - 如何在打包的 Shiny 应用程序中引用 JS 文件中的图像?

r - 如何使用数据表函数替换在 R 中呈现的 DT 中的数据

R Shiny - 第 1 级没有此类指数

r - 向数据框中的所有行添加一个常量值

r - 标记基于参数的记录第一次出现在 r 数据框中

sqlite - SoapUI + sqlite-jdbc = ClassNotFoundException

java - SQLite : Comparing timestamp value stored in a column to current Date

android - 从大文本搜索优化

r - 单击列标题上的图标时弹出消息

javascript - R 中的 "Icon"(ISOTYPE) 图表在 Javascript 中 Shiny