#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 Не совсем, решение, похоже, работает, но я согласен, что оно не самое лучшее…