Срок действия объекта DbPool истекает

#r #sqlite #shiny #pool

#r #sqlite #блестящий #Бассейн

Вопрос:

Я использую pool пакет для подключения готового приложения к довольно большой базе данных SQLite (3 ГБ, 70 млн строк).

Я создаю пул, используя:

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

Локально все работает отлично, но когда я помещаю его на свой сервер (я использую DigitalOcean droplet, на котором работает Shiny server), пул истекает очень быстро через ~ 15 секунд, независимо от того, активен я в приложении или нет.

В журналах я вижу

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

Я пытался изменить параметры idleTimeout и minSize при создании пула, но безрезультатно.

Как я могу это предотвратить? Есть ли способ проверить, действителен ли пул, и если нет, повторно подключиться к БД?

Кроме того, было бы хорошо, если бы кто-нибудь мог дать некоторое представление о том, почему это может происходить.

Ответ №1:

На всякий случай, если кто-то еще столкнется с этой проблемой, я решил проблему, проверив valid атрибут соединения с пулом. Поэтому я могу добавлять запросы чем-то вроде:

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

Похоже, это решило проблему

Комментарии:

1. Вы когда-нибудь выясняли, что вызывает это?

2. @tcash21 Не совсем, решение, похоже, работает, но я согласен, что оно не самое лучшее…