Реклама:

Чтобы актуализировать источник данных, т. е. привести его записи к виду, в котором уже находятся записи в наборах данных приложения, производят запоминание изменений. Для этого приложение вновь устанавливет (вернее сказать, восстанавливает) соединение с источником данных, в приложении выбираются измененные записи и над копиями этих записей в источнике данных производятся такие же действия, как в приложении (удаление, изменение). В источник также данных добавляют записи, добавленные в приложении. После этого соединение с источником данных вновь разрывается.

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

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

Отдельные команды данных могут использоваться для выполнения запросов, не возвращающих данных, а выполняющих изменение данных в источнике (например, SQL-операторы INSERT, UPDATE, DELETE) или изменение там же структур данных (например, SQL-операторы CREATE TABLE, ALTER TABLE и т. д.). Выгоднее выполнять такие операторы не поодиночке, а совместно отдельным пакетом, с единовременной установкой соединения и его последующим разрывом по выполнении всего пакета.

Соединение с источником данных нельзя разрывать только до окончания выполнения транзакции - группы физически обособленных, но логически единых действий. Если хотя бы одно из таких действий заканчивается ошибкой, результаты всех прочих рассматриваемых в контексте транзакций, отменяются. Как правило, транзакции используются для внесения связанных по смыслу изменений в группу различных таблиц, размещенных в одном или нескольких источниках данных.

Процесс установки соединения достаточно ресурсоемок. Чтобы минимизировать затраты ресурсов, закрытое в приложении соединение фактически не высвобождается, а помещается в пул - динамически разделяемую область памяти. Когда соединение с такими же параметрами нужно этому приложению или другому, работающему параллельно, объект соединения запрашивается из пула. Будучи снова закрыто в приложении, соединение опять поступает в пул. Так обеспечивается взаимодействие множества параллельно работающих пользователей и источника данных, что значительно повышает масштабируемость приложений.

Из вышесказанного можно сделать следующие выводы:

• В приложении нужно стремиться свести к минимуму время соединения с источником данных.

• Нельзя давать пользователю возможность самому управлять транзакциями; приложение и(или) источник данных должны сами управлять транзакциями.

• Необходимо - где это возможно - использовать в приложениях соединения с одинаковыми параметрами. Такие соединения будут выбираться из пула вместо того чтобы создаваться всякий раз заново. Масштабируемость создаваемых приложений от этого повысится.


⇐ Предыдущая страница| |Следующая страница ⇒