Я предпочел использовать пакет pool
для управления соединениями. Мне не нужно было иметь большой «пул» соединений, чтобы воспользоваться одной из его возможностей: переподключение по таймауту.
Использование достаточно просто. Подобно большинству других DBI
драйверов, вам не нужно library(pool)
, просто обратитесь к нему при открытии.
Если ваш исходный открытый вызов:
library(DBI)
con <- dbConnect(odbc::odbc(), driver = "ODBC Driver 17 for SQL Server",
server = "somehost,1433", uid = "someuser", pwd = "secret",
database = "umptysquat")
Тогда вместо используйте:
con <- pool::dbPool(odbc::odbc(), driver = "ODBC Driver 17 for SQL Server",
server = "somehost,1433", uid = "someuser", pwd = "secret",
database = "umptysquat", minSize = 1, maxSize = 5)
(замена значащих чисел на minSize
и maxSize
). Отсюда DBI::dbGetQuery(con, "select 1 as a")
работает так, как будто это реально. Для меня одно из реальных преимуществ заключается в том, что когда соединение закрыто (по любой причине, включая тайм-аут и мой sh туннель не работает), соединение пула автоматически переподключается при следующем запросе.
Большинство функций работают как есть, хотя иногда (я не могу вспомнить или воспроизвести в данный момент) мне пришлось сделать library(pool);library(odbc)
для некоторых функций DBI. Опять же, не могу вспомнить, это может быть что-то не связанное. Загрузка их, как правило, не является проблемой (я просто предпочитаю не прикреплять слишком много пакетов, если я могу избежать этого).