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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: где лучше выполнять QSqlQuery, на сервере или на клиенте?  (Прочитано 5943 раз)
unkeep
Гость
« : Июль 07, 2016, 18:21 »

допустим есть несколько физических узлов(компов) равных по мощности. На одном стоит сервер БД, на остальных клиентское ПО. В каком случае будут более рационально использованы ресурсы:
1) Серверное ПО создаёт и выполняет QSqlQuery, а после отдаёт готовые данные клиенту по тсп сокету.
2) Клиентское ПО создаёт и выполняет QSqlQuery, а на серверном машине есть только сервер БД, другого ПО нету.

в общем один и тот же запрос можно выполнить как на узле с бд, так и на других узлах. Как при этом будет распределятся нагрузка?
« Последнее редактирование: Июль 07, 2016, 18:56 от unkeep » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Июль 07, 2016, 18:58 »

Мне кажется есть очень много дополнительных факторов(кроме мощности компьютера), которые еще нужно учитывать.
Чаще всего выполнение на сервере более производительно, но опять таки, все зависит от задачи.

Цитировать
Серверное ПО создаёт и выполняет QSqlQuery

Не совсем понял, что вы имеете ввиду. У вас еще есть дополнительный сервер, который работает с базой, а клиенты работают с базой через него?
« Последнее редактирование: Июль 07, 2016, 19:01 от PimenS » Записан
unkeep
Гость
« Ответ #2 : Июль 07, 2016, 19:28 »

на данный момент есть система работающая по варианту №1. Т.е да, клиент работает не на прямую с сервером бд, а через дополнительный программный слой на серверном узле, который преобразовывает запрос полученный через сеть в запрос QSqlQuery. Проблема в том, что даже несмотря на многопоточную реализацию этого слоя со своей очередью запросов, сервер можно повесить 5тью плотно работающими клиентами. При этом все клиенты начнут получать таймауты.
Вот и встал вопрос об оптимизации: "а можно ли более равномерно распределить нагрузку, вызывая запросы на клиентах?"
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Июль 07, 2016, 19:44 »

Тогда встречный вопрос. А почему клиент не работает напрямую с базой?

Не знаю вашей задачи. У меня например клиенты работают напрямую с базой. Конечно больше 10-ти одновременно работающих клиентов я не проверял, но при 10-ти
никаких проблем не наблюдал.


Невнимательно ответ прочитал. Какой SQL у вас?
« Последнее редактирование: Июль 07, 2016, 20:06 от PimenS » Записан
unkeep
Гость
« Ответ #4 : Июль 08, 2016, 11:28 »

Невнимательно ответ прочитал. Какой SQL у вас?

Postgre
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #5 : Июль 08, 2016, 11:53 »

Как вариант, более сложные операции выполняйте на сервере Postgresql, простые на клиенте.
Только без дополнительной прокладки.
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #6 : Март 11, 2017, 01:47 »

Если я правильно понял структуру вашего ПО, клиентская часть может преобразовывать запросы в формат QSqlQuery или же отправлять as is на сервер.
Рациональный путь, кмк, комбинационный - предварительный запрос о текущей нагрузке на сервер. Если сервер не загружен, работа достается ему (клиентские машины должны грузиться по-минимуму). Если сервер загружен, придется грузить работой клиентские машины.
Записан

Эвтаназия - наше хобби!
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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