Меню

Оптимизация приложений С++ Builder в клиент-серверной архитектуре

При переносе информационных систем в архитектуру клиент-сервер на C++ Builder наиважнейшей задачей является повышение производительности работы пользователей. Особенно это актуально в тех случаях, когда скорость обработки данных большого объема и большого количества запросов очень мала или не удовлетворяет. Преимущества такого перехода очевидны: существенно меньший сетевой трафик, меньшая ресурсоемкость клиентских приложений, меньшее время обработки запросов и меньшие трудозатраты при разработке приложений.

Первым шагом в повышении эффективности работы как пользователей, так и системы на C++ Builder в целом, является, несомненно, выбор сервера. На самом деле это непростая задача, здесь необходимо учитывать несколько параметров: скорость роста объема данных, рост интенсивности работы пользователей, интенсивность транзакций, вероятность многопользовательского доступа к записям в таблицах и другое.

Предположим, что сервер уже выбран. Эффективность эксплуатации всей системы зависит от скоординированной работы трех частей – сервера баз данных, клиентской части серверной СУБД и клиентского приложения. Соответственно неправильная работа одной из этих частей может привести к нулевому результату, несмотря на все усилия. Таким образом, для оптимизации работы информационной системы необходимо решить нескольких задач: снижение сетевого трафика, оптимизации серверной и клиентской частей.

SQL Monitor применяется для контроля запросов, направляемых клиентским приложением посредством BDE серверу баз данных. При этом можно указать тип отображаемых сведений: Options -> Trace Options. При этом можно просмотреть: Prepared Query Statements; Executed Query Statements; Statement Operations; Connect/Disconnect; Transactions; Blob I/O; Miscellaneous; Vendor Errors; Vendor Calls.

Одним из способов минимизации связей с сервером является изменение значения параметра SQLPASSTHRU MODE компонента TDatabase. Данный параметр определяет возможность соединения с базой данных двумя типами запросов: сгенерированными приложением либо самой библиотекой BDE. Стандартное значение данного параметра – NOT SHARED. Наиболее эффективным является значение SHARED AUTOCOMMIT. Данное значение позволяет немедленно фиксировать изменения каждой записи в таблицах, хотя при этом оба типа запросов имеют возможность использовать одно и то же соединение. Другое возможное значение данного параметра – SHARED NOAUTOCOMMIT, при его применении все так же, как и в предыдущем, однако контроль за завершением транзакций необходимо осуществлять в клиентском приложении (подробнее см. на исходники c++).

Следующим способом минимизации связей с сервером является использование кэширования структуры таблиц на рабочей станции. В итоге, при определении метаданных, снижается число обращений к серверу, сюда входят: количества столбцов в таблицах, их имен и типов данных. Такие действия могут повысить производительность клиентских приложений, а также снизить нагрузку на сеть. Но следует учесть, что применимо это только если структура таблиц не изменяется в процессе работы приложения.

Производительность информационной системы на C++ Builder можно увеличить, если на сервере есть многократно повторяющиеся действия. Для этого используют хранимые процедуры сервера, а не SQL-запросы. Это связано с тем, что переданный SQL-запрос оптимизируется сервером, компилируется и только потом выполняется, а при сохранении процедур, они содержатся уже в скомпилированном и оптимизированном виде, поэтому обработка данных требует меньше времени, особенно это касается небольших по числу и объему передаваемых параметров.