Russian Qt Forum

Qt => Базы данных => Тема начата: sergek от Август 05, 2020, 21:51



Название: [РЕШЕНО]Частое открытие или постоянное соединение с БД?
Отправлено: sergek от Август 05, 2020, 21:51
Коллеги,
стоит задача периодической передачи изменений в таблице БД на сервер. Сделано по таймеру,  выполняется открытие соединения с БД (QSqlDatabase::database(connName)), выборка и отправка данных, после чего соединение закрывается (QSqlDatabase::removeDatabase(connName)).
Эта функция выполняется с интервалом 0.5 секунды. Я бы подключился один раз и не закрывал подключение к БД, но функция работает 24x7, и у меня есть сомнение, не появятся сбои, к примеру, через месяц. Как считаете, описанный вариант имеет право на жизнь, или по-правильному сделать постоянное соединение с проверкой подключения и чего-то там еще?
СУБД PosgtreSQL, версия 10 с чем-то, Ubuntu.


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: Пантер от Август 05, 2020, 23:06
Зачем тратить время на подключения/отключение? Пусть висит себе соединение, только делай реконнект если что не так пошло.


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: sergek от Август 06, 2020, 08:42
Ок, спасибо.


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: RedDog от Август 07, 2020, 22:05
Коннект к БД постоянный, его валидность проверять по таймеру запросом а-ля
Код:
QSqlQuery("select true").isActive()
PS: проект в продакшене уже 4 года держит постоянно 24 подключения в режиме 24/7 (бывает перезапускается для обновления).


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: sergek от Август 07, 2020, 23:34
PS: проект в продакшене уже 4 года держит постоянно 24 подключения в режиме 24/7 (бывает перезапускается для обновления).
Вот это я и хотел услышать, спасибо!
А коннект проверить легко, есть isOpen(), проверять можно и без таймера, а перед каждым запросом. Собственно, QSqlDatabase::database(connName) по умолчанию открывает соединение.


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: RedDog от Август 08, 2020, 13:10
isopen не сработает, если сеть упала, она работает если в коде идёт подключение/отключение.
Если внешние факторы вмешались, будет возвращать истину.


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: sergek от Август 08, 2020, 18:24
 "Мда. Плохо дело. Вся ... нафиг."


Название: Re: Частое открытие или постоянное соединение с БД?
Отправлено: Пантер от Август 08, 2020, 22:09
Тебе достаточно будет переподключаться, если запрос зафэйлился.