Russian Qt Forum
Ноябрь 22, 2024, 17:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Частое открытие или постоянное соединение с БД?  (Прочитано 10547 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« : Август 05, 2020, 21:51 »

Коллеги,
стоит задача периодической передачи изменений в таблице БД на сервер. Сделано по таймеру,  выполняется открытие соединения с БД (QSqlDatabase::database(connName)), выборка и отправка данных, после чего соединение закрывается (QSqlDatabase::removeDatabase(connName)).
Эта функция выполняется с интервалом 0.5 секунды. Я бы подключился один раз и не закрывал подключение к БД, но функция работает 24x7, и у меня есть сомнение, не появятся сбои, к примеру, через месяц. Как считаете, описанный вариант имеет право на жизнь, или по-правильному сделать постоянное соединение с проверкой подключения и чего-то там еще?
СУБД PosgtreSQL, версия 10 с чем-то, Ubuntu.
« Последнее редактирование: Август 14, 2020, 10:42 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 05, 2020, 23:06 »

Зачем тратить время на подключения/отключение? Пусть висит себе соединение, только делай реконнект если что не так пошло.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Август 06, 2020, 08:42 »

Ок, спасибо.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #3 : Август 07, 2020, 22:05 »

Коннект к БД постоянный, его валидность проверять по таймеру запросом а-ля
Код:
QSqlQuery("select true").isActive()
PS: проект в продакшене уже 4 года держит постоянно 24 подключения в режиме 24/7 (бывает перезапускается для обновления).
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Август 07, 2020, 23:34 »

PS: проект в продакшене уже 4 года держит постоянно 24 подключения в режиме 24/7 (бывает перезапускается для обновления).
Вот это я и хотел услышать, спасибо!
А коннект проверить легко, есть isOpen(), проверять можно и без таймера, а перед каждым запросом. Собственно, QSqlDatabase::database(connName) по умолчанию открывает соединение.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #5 : Август 08, 2020, 13:10 »

isopen не сработает, если сеть упала, она работает если в коде идёт подключение/отключение.
Если внешние факторы вмешались, будет возвращать истину.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #6 : Август 08, 2020, 18:24 »

 "Мда. Плохо дело. Вся ... нафиг."
« Последнее редактирование: Август 08, 2020, 18:27 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Август 08, 2020, 22:09 »

Тебе достаточно будет переподключаться, если запрос зафэйлился.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 22.