Russian Qt Forum

Qt => Базы данных => Тема начата: unkeep от Июль 07, 2016, 18:21



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

в общем один и тот же запрос можно выполнить как на узле с бд, так и на других узлах. Как при этом будет распределятся нагрузка?


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: PimenS от Июль 07, 2016, 18:58
Мне кажется есть очень много дополнительных факторов(кроме мощности компьютера), которые еще нужно учитывать.
Чаще всего выполнение на сервере более производительно, но опять таки, все зависит от задачи.

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

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


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: unkeep от Июль 07, 2016, 19:28
на данный момент есть система работающая по варианту №1. Т.е да, клиент работает не на прямую с сервером бд, а через дополнительный программный слой на серверном узле, который преобразовывает запрос полученный через сеть в запрос QSqlQuery. Проблема в том, что даже несмотря на многопоточную реализацию этого слоя со своей очередью запросов, сервер можно повесить 5тью плотно работающими клиентами. При этом все клиенты начнут получать таймауты.
Вот и встал вопрос об оптимизации: "а можно ли более равномерно распределить нагрузку, вызывая запросы на клиентах?"


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: PimenS от Июль 07, 2016, 19:44
Тогда встречный вопрос. А почему клиент не работает напрямую с базой?

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


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


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: unkeep от Июль 08, 2016, 11:28
Невнимательно ответ прочитал. Какой SQL у вас?

Postgre


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: PimenS от Июль 08, 2016, 11:53
Как вариант, более сложные операции выполняйте на сервере Postgresql, простые на клиенте.
Только без дополнительной прокладки.


Название: Re: где лучше выполнять QSqlQuery, на сервере или на клиенте?
Отправлено: PinkPanther от Март 11, 2017, 01:47
Если я правильно понял структуру вашего ПО, клиентская часть может преобразовывать запросы в формат QSqlQuery или же отправлять as is на сервер.
Рациональный путь, кмк, комбинационный - предварительный запрос о текущей нагрузке на сервер. Если сервер не загружен, работа достается ему (клиентские машины должны грузиться по-минимуму). Если сервер загружен, придется грузить работой клиентские машины.